Добавете колона с NULL като стойност, за да генерирате отделен възел на елемент за всяка колона.
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;
Резултат:
<parent>
<item>1</item>
<item>2</item>
<item>3</item>
</parent>
SQL Fiddle
Защо това работи?
Колоните без име се вмъкват като текстови възли. В този случай стойността NULL се вмъква като текстов възел между item
възли.
Ако добавите действителни стойности вместо NULL, ще видите какво се случва.
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;
Резултат:
<parent>
<item>1</item>1<item>2</item>2<item>3</item></parent>
Друг начин да посочите колона без име е да използвате заместващия знак *
като псевдоним на колона.
Колони с име, посочено като заместващ знак
В този случай не е необходимо да използвате заместващия знак, тъй като колоните със стойности NULL нямат име на колона, но е полезно, когато искате стойности от действителни колони, но не искате името на колоната да бъде име на възел.