web-dev-qa-db-ja.com

SQL FORXML-データを要素または属性として出力する

顧客が指定した特定のXML形式でデータベースからデータをエクスポートしようとしています。私が作成するXMLは、サードパーティによって(おそらくXSLTによって)操作されて最終的な出力を生成しますが、XMLをできるだけその形式に近い形式にしたいと考えています。

顧客は次のように各製品のデータを要求しています。

<product id="1234567890123">
    <activeState partNumber="A1234567890" shipmentDate="20110518" />
</product>

私の既存のSQLは:

SELECT SerialNo as id, 
    PartNo as partNumber,
    CONVERT(VARCHAR(8), GETDATE(), 112) AS shipmentDate, 
FROM Products
WHERE SerialNo = @SerialNo
FOR XML PATH ('product'), TYPE)

...レンダリング:

<product>
  <id>100000000458</id>
  <partNumber>10004905892</partNumber>
  <shipmentDate>20120312</shipmentDate>
</product>

XSLTでこのデータを操作するのは簡単だと思いますが、純粋に知的演習として、SQLでどこまでできるかを確認したいと思います。私の最初の野心は、idを子要素としてではなく、製品の属性として単に表現することでした。 XSLTに任せる予定だったactiveState要素のレンダリングですが、明らかに、途中で彼らを助けることができれば、そうしないのはなぜですか...

助言がありますか?

23
CJM

使用する @属性を作成します。

select SerialNo as "@id",
       PartNo as "activeState/@partNumber",
       convert(varchar(8), getdate(), 112) as "activeState/@shipmentDate"
from Products
where SerialNo = @SerialNo
for xml path('product')
37
Mikael Eriksson