値として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フィドル
なぜこれが機能するのですか?
名前のない列は、テキストノードとして挿入されます。この場合、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値の列には列名がないため、ワイルドカードを使用する必要はありませんが、実際の列の値が必要であるが、列名をノード名にしたくない場合に役立ちます。