sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server FOR XML Path gör repeterande noder

Lägg till en kolumn med NULL som värde för att generera en separat objektnod för varje kolumn.

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;

Resultat:

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

SQL Fiddle

Varför fungerar det här?

Kolumner utan namn infogas som textnoder. I det här fallet infogas NULL-värdet som en textnod mellan item noder.

Om du lägger till faktiska värden istället för NULL kommer du att se vad som händer.

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;

Resultat:

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

Ett annat sätt att ange en kolumn utan namn är att använda jokertecknet * som kolumnalias.

Kolumner med ett namn specificerat som jokertecken

Det är inte nödvändigt att använda jokertecken i det här fallet eftersom kolumnerna med NULL-värden inte har ett kolumnnamn men det är användbart när du vill ha värden från faktiska kolumner men du inte vill att kolumnnamnet ska vara ett nodnamn.



  1. Hur cbrt() fungerar i PostgreSQL

  2. Hur man lägger till en titel i en rapporthuvud i Microsoft Access

  3. Varför ska jag inte använda mysql_*-funktioner i PHP?

  4. Får körningsbehörighet till xp_cmdshell