sql >> Databáze >  >> RDS >> Sqlserver

SQL Server FOR XML Path vytvořit opakující se uzly

Přidejte sloupec s hodnotou NULL a vygenerujte pro každý sloupec samostatný uzel položky.

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;

Výsledek:

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

SQL Fiddle

Proč to funguje?

Sloupce bez názvu se vkládají jako textové uzly. V tomto případě je hodnota NULL vložena jako textový uzel mezi item uzly.

Pokud místo NULL přidáte skutečné hodnoty, uvidíte, co se děje.

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;

Výsledek:

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

Dalším způsobem, jak zadat sloupec bez názvu, je použít zástupný znak * jako alias sloupce.

Sloupce s názvem zadaným jako zástupný znak

V tomto případě není nutné používat zástupný znak, protože sloupce s hodnotami NULL nemají název sloupce, ale je to užitečné, když chcete hodnoty ze skutečných sloupců, ale nechcete, aby název sloupce byl název uzlu.



  1. Nejlepší skupiny na Facebooku pro Analytics, Big Data, Data Mining, Hadoop, NoSQL, Data Science

  2. Evoluce a budoucnost Microsoft Access

  3. Živé migrace pomocí replikace MySQL

  4. Jsou v MySQL povoleny vnořené transakce?