sql >> データベース >  >> RDS >> Sqlserver

SQL ServerFORXMLパ​​スは繰り返しノードを作成します

    値として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値の列には列名がないため、ワイルドカードを使用する必要はありませんが、実際の列の値が必要であるが、列名をノード名にしたくない場合に役立ちます。



    1. 複合主キーを持つテーブルのレコードの順序は何ですか

    2. SQLServerの結果セットのパーセンテージを返す

    3. GROUPBY式のヘルプではないOracleSQLGROUP BY

    4. mysqlデータベースからJSON配列を構築する方法