从SQL Server表以适当的语法生成XML

时间:2012-02-12 12:16:44

标签: sql-server xml

如何编写SQL语句来生成这样的XML

<ROOT>
  <Production.Product> 
     <ProductID>1 </ProductID>
     <Name>Adjustable Race</Name>
     ........
  </Production.Product>
</ROOT>

目前我正在使用

SELECT * FROM Production.Product
    FOR XML auto

结果是:

<ROOT>
   <Production.Product ProductID="1" Name="Adjustable Race" 
       ProductNumber="AR-5381" MakeFlag="0" FinishedGoodsFlag="0" 
       SafetyStockLevel="1000" ReorderPoint="750" StandardCost="0.0000" 
       ListPrice="0.0000" DaysToManufacture="0" SellStartDate="1998-06-01T00:00:00" 
       rowguid="694215B7-08F7-4C0D-ACB1-D734BA44C0C8" 
       ModifiedDate="2004-03-11T10:01:36.827" />

1 个答案:

答案 0 :(得分:8)

一种简单的方法是使用:

SELECT * 
FROM Production.Product
FOR XML AUTO, ELEMENTS

然后,您的数据应存储在<Production.Product>节点内的XM​​L元素中。

如果您需要更多控制权,那么您应该查看FOR XML PATH语法 - 请查看What's new in FOR XML in SQL Server 2005上的这篇MSDN文章,其中解释了FOR XML PATH(以及其他新功能)。< / p>

基本上,使用FOR XML PATH,您可以非常轻松地控制事物的呈现方式 - 作为元素或属性 - 如下所示:

SELECT 
    ProductID AS '@ProductID',  -- rendered as attribute on XML node
    Name, ProductNumber,        -- all rendered as elements inside XML node
    .....
FROM Production.Product
FOR XML PATH('NewProductNode')   -- define a new name for the XML node 

这会给你类似的东西:

<NewProductNode ProductID="1">
   <Name>Adjustabel Race</Name>
   <ProductNumber>AR-5381</ProductNumber>
   .....
</NewProductNode>