2012-03-29 100 views
17

我试图以客户指定的特定XML格式从数据库中导出一些数据。我产生的XML将被第三方操纵(大概是由XSLT来产生最终的输出),但是我想尽我所能地将XML格式化为这种格式。SQL FOR 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作为产品属性而不是孩子元素。 activeState元素的渲染我将要离开XSLT,但显然,如果我可以帮助他们,为什么不这样做...

有什么建议吗?

回答

27

使用@来创建属性。

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') 
+0

作品一种享受 - 谢谢。 – CJM 2012-03-30 14:16:57