我正在阅读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?
感谢您的帮助
答案 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
来生成相关指定的输出。