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

SQL Server FOR XML Path tworzy powtarzające się węzły

Dodaj kolumnę z wartością NULL, aby wygenerować oddzielny węzeł elementu dla każdej kolumny.

SELECT 
  t.col1 as 'item'
 ,NULL
 ,t.col2 as 'item'
 ,NULL
 ,t.col3 as 'item' 
FROM dbo.tbl as t 
FOR XML PATH('parent'), TYPE;

Wynik:

<parent>
  <item>1</item>
  <item>2</item>
  <item>3</item>
</parent>

Skrzypce SQL

Dlaczego to działa?

Kolumny bez nazwy są wstawiane jako węzły tekstowe. W tym przypadku wartość NULL jest wstawiana jako węzeł tekstowy między item węzłów.

Jeśli dodasz rzeczywiste wartości zamiast NULL, zobaczysz, co się dzieje.

SELECT 
  t.col1 as 'item'
 ,'1'
 ,t.col2 as 'item'
 ,'2'
 ,t.col3 as 'item' 
FROM dbo.tbl as t 
FOR XML PATH('parent'), TYPE;

Wynik:

<parent>
  <item>1</item>1<item>2</item>2<item>3</item></parent>

Innym sposobem określenia kolumny bez nazwy jest użycie znaku wieloznacznego * jako alias kolumny.

Kolumny z nazwą określoną jako symbol wieloznaczny

W tym przypadku użycie symbolu wieloznacznego nie jest konieczne, ponieważ kolumny z wartościami NULL nie mają nazwy kolumny, ale jest to przydatne, gdy chcesz uzyskać wartości z rzeczywistych kolumn, ale nie chcesz, aby nazwa kolumny była nazwą węzła.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukaj tekst w procedurze składowanej w SQL Server

  2. Wydajność serwera SQL — testowanie w chmurze

  3. Jak uzyskać tylko wartości liczbowe kolumn?

  4. Jak wyświetlić pełną zawartość kolumny tekstowej lub varchar(MAX) w programie SQL Server 2008 Management Studio?

  5. Jak znaleźć katalog danych dla instancji SQL Server?