以下示例查询 Production.Product 表以检索特定产品的 ListPrice 和 StandardCost 值。 为了使查询变得有趣,这两种 <Price> 价格都会在元素中返回,并且每个 <Price> 元素都有一个 PriceType 属性。
示例:
这是 XML 的预期形状:
<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" elementFormDefault="qualified">
<xsd:import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="https://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="Production.Product" type="xsd:anyType" />
</xsd:schema>
<Production.Product xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" ProductID="520">
<Price xmlns="" PriceType="ListPrice">133.34</Price>
<Price xmlns="" PriceType="StandardCost">98.77</Price>
</Production.Product>
这是嵌套的 FOR XML 查询:
USE AdventureWorks2012;
GO
SELECT Product.ProductID,
(SELECT 'ListPrice' as PriceType,
CAST(CAST(ListPrice as NVARCHAR(40)) as XML)
FROM Production.Product Price
WHERE Price.ProductID=Product.ProductID
FOR XML AUTO, TYPE),
(SELECT 'StandardCost' as PriceType,
CAST(CAST(StandardCost as NVARCHAR(40)) as XML)
FROM Production.Product Price
WHERE Price.ProductID=Product.ProductID
FOR XML AUTO, TYPE)
FROM Production.Product
WHERE ProductID=520
for XML AUTO, TYPE, XMLSCHEMA
请注意上述查询的以下方面:
外部 SELECT 语句构造 <
Product> 具有 ProductID 属性和两 <Price> 个子元素的元素。两个内部 SELECT 语句构造两 <
Price> 个元素,每个元素都具有 PriceType 属性和返回产品价格的 XML。外部 SELECT 语句中的 XMLSCHEMA 指令生成内联 XSD 架构,该架构描述生成的 XML 的形状。
若要使查询变得有趣,可以编写 FOR XML 查询,然后针对结果编写 XQuery 以重塑 XML,如以下查询所示:
SELECT ProductID,
( SELECT p2.ListPrice, p2.StandardCost
FROM Production.Product p2
WHERE Product.ProductID = p2.ProductID
FOR XML AUTO, ELEMENTS XSINIL, type ).query('
for $p in /p2/*
return
<Price PriceType = "{local-name($p)}">
{ data($p) }
</Price>
')
FROM Production.Product
WHERE ProductID = 520
FOR XML AUTO, TYPE
前面的示例使用 query() 数据类型的方法查询内部 FOR XML 查询返回的 xml XML 并构造预期结果。
结果如下:
<Production.Product ProductID="520">
<Price PriceType="ListPrice">133.3400</Price>
<Price PriceType="StandardCost">98.7700</Price>
</Production.Product>