Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak rzeczy i „Dla ścieżki XML” działają w programie SQL Server?

Oto jak to działa:

1. Pobierz ciąg elementów XML za pomocą FOR XML

Dodanie FOR XML PATH na końcu zapytania umożliwia wyświetlanie wyników zapytania jako elementów XML z nazwą elementu zawartą w argumencie PATH. Na przykład, gdybyśmy mieli uruchomić następującą instrukcję:

SELECT ',' + name 
              FROM temp1
              FOR XML PATH ('')

Przekazując pusty ciąg (FOR XML PATH('')), zamiast tego otrzymujemy:

,aaa,bbb,ccc,ddd,eee

2. Usuń początkowy przecinek za pomocą STUFF

Instrukcja STUFF dosłownie „wpycha” jeden ciąg do drugiego, zastępując znaki w pierwszym ciągu. My jednak używamy go po prostu do usunięcia pierwszego znaku z wynikowej listy wartości.

SELECT abc = STUFF((
            SELECT ',' + NAME
            FROM temp1
            FOR XML PATH('')
            ), 1, 1, '')
FROM temp1

Parametry STUFF są:

  • Ciąg, który ma zostać „wypchany” (w naszym przypadku pełna lista nazwisk z początkowym przecinkiem)
  • Lokalizacja do rozpoczęcia usuwania i wstawiania znaków (1, wpychamy do pustego ciągu)
  • Liczba znaków do usunięcia (1, jako wiodący przecinek)

W efekcie otrzymujemy:

aaa,bbb,ccc,ddd,eee

3. Dołącz na id, aby uzyskać pełną listę

Następnie dołączamy do tego na liście identyfikatorów w tabeli tymczasowej, aby uzyskać listę identyfikatorów o nazwie:

SELECT ID,  abc = STUFF(
             (SELECT ',' + name 
              FROM temp1 t1
              WHERE t1.id = t2.id
              FOR XML PATH (''))
             , 1, 1, '') from temp1 t2
group by id;

I mamy nasz wynik:

Identyfikator Nazwa 1aaa, bbb, ccc, ddd, eee

Mam nadzieję, że to pomoże!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień typy kolumn w ogromnej tabeli

  2. wybierz * z tabeli vs wybierz colA, colB, itp. z tabeli ciekawe zachowanie w SQL Server 2005

  3. Zmień priorytet konta w profilu poczty bazy danych (SSMS)

  4. Jak wygenerować losową liczbę dla każdego wiersza w zaznaczeniu T-SQL?

  5. Konwertuj „datetime” na „smalldatetime” w SQL Server (przykłady T-SQL)