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.