sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server FOR XML Path laver gentagne noder

Tilføj en kolonne med NULL som værdi for at generere en separat vareknude for hver kolonne.

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

Hvorfor virker dette?

Kolonner uden navn indsættes som tekstnoder. I dette tilfælde er NULL-værdien indsat som en tekstnode mellem item noder.

Hvis du tilføjer faktiske værdier i stedet for NULL, vil du se, hvad der sker.

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>

En anden måde at angive en kolonne uden et navn på er at bruge jokertegnet * som et kolonnealias.

Kolonner med et navn angivet som et jokertegn

Det er ikke nødvendigt at bruge jokertegnet i dette tilfælde, fordi kolonnerne med NULL-værdier ikke har et kolonnenavn, men det er nyttigt, når du vil have værdier fra faktiske kolonner, men du ikke ønsker, at kolonnenavnet skal være et nodenavn.



  1. Sådan konverteres et Unix-tidsstempel til en dato/tidsværdi i SQL Server

  2. RR vs YY i Oracle

  3. MYSQL ind i outfil adgang nægtet - men min bruger har ALT adgang.. og mappen er CHMOD 777

  4. MySQL-fejl 1215:Kan ikke tilføje fremmednøglebegrænsning