xml
FOR XML 查询中的数据类型和 TYPE 指令使 FOR XML 查询返回的 XML 可以在服务器和客户端上进行处理。
使用 xml 类型变量进行处理
可以将 FOR XML 查询结果 xml 分配给类型变量,或使用 XQuery 查询结果,并将该结果 xml 分配给类型变量以便进行更多处理。
DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />
还可以使用其中一种数据类型方法来处理变量 @x中返回的 xml XML。 例如,可以使用 value() 方法检索ProductModelID属性值。
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
在下面的示例中,FOR XML 查询结果被返回为 xml 类型,因为在 FOR XML 子句中指定了 TYPE 指令。
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
结果如下:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
由于结果是xml类型,您可以直接对该 XML 指定其中一个xml数据类型方法,如下查询所示。 在查询中, query() 方法(xml 数据类型) 用于检索元素的第一个 <row> 元素子 <myRoot> 元素。
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
结果如下:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
将内部 FOR XML 查询结果作为 xml 类型实例返回到外部查询
可以编写嵌套 FOR XML 查询,其中内部查询的结果作为 xml 类型返回到外部查询。 例如:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
请注意上述查询的以下方面:
内部
FOR XML查询生成的 XML 将添加到外部FOR XML生成的 XML 中。内部查询指定
TYPE指令。 因此,内部查询返回的 XML 数据的类型xml。 如果未指定 TYPE 指令,则返回内层FOR XML查询的结果作为nvarchar(max),并且 XML 数据将被转换为实体引用。
控制生成的 XML 数据的形状
嵌套 FOR XML 查询可让你更灵活地定义生成的 XML 数据的形状。 可以使用嵌套 FOR XML 查询来构造部分以属性为中心的 XML 和部分以元素为中心的 XML。
有关使用嵌套 FOR XML 查询指定以属性为中心的 XML 和以元素为中心的 XML 的详细信息,请参阅 FOR XML 查询与嵌套 FOR XML 查询相比 和 使用嵌套 FOR XML 查询构造 XML。
可以通过指定嵌套 AUTO 模式 FOR XML 查询来生成包含同级元素的 XML 层次结构。 有关详细信息,请参阅使用嵌套 AUTO 模式查询生成同级。
无论使用哪种模式,嵌套 FOR XML 查询都会在描述生成的 XML 的形状时提供更多的控制。 它们可用于代替 EXPLICIT 模式查询。
例子
以下主题提供了嵌套 FOR XML 查询的示例。
FOR XML 查询与嵌套 FOR XML 查询相比
将单级 FOR XML 查询与嵌套的 FOR XML 查询进行比较。 此示例演示了如何指定以属性为中心的 XML 和以元素为中心的 XML 作为查询结果。
使用嵌套 AUTO 模式查询生成同级
演示如何使用嵌套 AUTO 模式查询生成同级
在 ASP.NET 中使用嵌套 FOR XML 查询
演示 ASPX 应用程序如何使用 FOR XML 从 SQL Server 返回 XML。
通过嵌套的 FOR XML 查询构建 XML
演示如何使用嵌套 FOR XML 查询来控制 SQL Server 创建的 XML 文档的结构。