SQL スクリプトを介して生成したい XML ドキュメントが与えられましたが、このようなことをしたことがなく、必要な最終的な XML を生成できるようにするための例を見つけることができませんでした (そして、私が必要とするものにより適している場合、利用可能な方法のどれが利用可能かわかりません-EXPLICITまたはPATH、またはそれが可能な場合でも)。SQL から XML を生成した経験のある人が正しい方向に向けてくれることを願っています (または、私がやろうとしていることは不可能であり、サブクエリでそれを行う必要があることを教えてください)。
シナリオは、単一のテーブルから製品の詳細を返すことです (必要な値ごとにサブクエリを実行する必要はありません)。
生成できることを望んでいるxmlは次のようになります(この形式を制御することはできません):
<records>
<record>
<fields>
<field name="id">
<values>
<value>666111</value>
</values>
</field>
<field name="name">
<values>
<value>
<![CDATA[My Product Title]]>
</value>
</values>
</field>
</fields>
</record>
<record>
...
</record>
</records>
私が見た最初の方法は、 FOR XML PATH を使用することです
SELECT TOP 2
'id' AS "@name",
p.product_id as [value],
p.title
FROM products p
ORDER BY p.product_id DESC
FOR XML PATH ('field'), ROOT ('fields'), ELEMENTS;
これにより、次の XML が得られます。
<fields>
<field name="id">
<value>20624</value>
<title>test154</title>
</field>
<field name="id">
<value>20623</value>
<title>test153</title>
</field>
</fields>
これにより、必要な '' が得られますが、次の要素に必要なレイアウトを指定することはできません。
FOR XML EXPLICIT も調べました
SELECT TOP 2
1 AS Tag, NULL AS Parent,
p.product_id AS [record!1!product_id!ELEMENT],
NULL AS [values!2!value!ELEMENT]
FROM products p
UNION ALL
SELECT TOP 2
2, 1,
p.product_id,
p.title
FROM products p
ORDER BY [record!1!product_id!ELEMENT] DESC
FOR XML EXPLICIT;
これにより、次の XML が得られました。
<record>
<product_id>20624</product_id>
<values>
<value>test154</value>
</values>
</record>
<record>
<product_id>20623</product_id>
<values>
<value>test153</value>
</values>
</record>
リクエストを作成したり、正しい線に沿ったものを取得したりできることに少し迷っています(そして、1回のルックアップでやりすぎていると思います。それが私の問題の原因です)。たとえそれが良いガイドを指し示していたとしても (私が見つけた唯一のものは例に関しては非常に貧弱でした - それらはあなたがそれらを構築/変更する方法の微妙な点を示していません)