FOR XML AUTO,RAW SQL Server

时间:2016-10-10 17:17:45

标签: sql-server xml

我正在阅读MS 70-461考试,在查看之前的考试时,我面临以下问题:

问题: 您需要编写一个Transact-SQL查询,以下列XML格式显示单个供应商收到的所有产品:

<Suppliers SupplierID="22" Company="Company Name" ContactNumber="510 250 6400">
     <Products ProductID="100" UnitPrice="249.00" UnitsInStock="7" />
     <Products ProductID="118" UnitPrice="559.00" UnitsInStock="12" />
</Suppliers>

正确答案

SELECT Suppliers.SupplierID, 
       Suppliers.CompanyName AS [Company],
       Suppliers.ContactNumber, 
       Products.ProductID, 
       Products.UnitPrice, 
       Products.UnitsInStock 
FROM Suppliers
INNER JOIN Products ON Suppliers.SupplierID = Products.SupplierID 
WHERE Suppliers.SupplierID = 22 
FOR XML AUTO, RAW

我尝试在SQL Server 2012和SQL Azure中使用FOR XML AUTO,RAW运行类似的查询,在这两种情况下我都收到错误。 FOR FOR XML AUTO,RAW有效吗? 我应该如何编写查询以返回上述XML?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

基于MSDN article,RAW和AUTO是两种不同的模式,不能一起使用:

  

FOR XML 子句中,您可以指定以下模式之一:

     
      
  • RAW
  •   
  • AUTO
  •   
  •   
  • PATH
  •   
     

RAW 模式在SELECT语句返回的行集中每行生成一个元素。您可以通过编写嵌套的FOR XML查询来生成XML层次结构。

     

AUTO 模式通过使用基于SELECT语句指定方式的启发式方法在生成的XML中生成嵌套。您几乎无法控制生成的XML的形状。可以编写嵌套的FOR XML查询,以生成超出由AUTO模式启发式生成的XML形状的XML层次结构。

因此,您应该使用FOR XML AUTO来生成相关指定的输出。