Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server FOR XML Path macht sich wiederholende Knoten

Fügen Sie eine Spalte mit NULL als Wert hinzu, um einen separaten Elementknoten für jede Spalte zu generieren.

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;

Ergebnis:

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

SQL-Fiddle

Warum funktioniert das?

Spalten ohne Namen werden als Textknoten eingefügt. In diesem Fall wird der NULL-Wert als Textknoten zwischen item eingefügt Knoten.

Wenn Sie anstelle von NULL tatsächliche Werte hinzufügen, sehen Sie, was passiert.

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;

Ergebnis:

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

Eine andere Möglichkeit, eine Spalte ohne Namen anzugeben, ist die Verwendung des Platzhalterzeichens * als Spaltenalias.

Spalten mit einem als Platzhalterzeichen angegebenen Namen

Es ist in diesem Fall nicht erforderlich, den Platzhalter zu verwenden, da die Spalten mit NULL-Werten keinen Spaltennamen haben, aber es ist nützlich, wenn Sie Werte aus tatsächlichen Spalten möchten, aber nicht möchten, dass der Spaltenname ein Knotenname ist.