示例:查询 XML 类型的列
下面的查询包括 xml 类型的列。 该查询从 xml 类型的 Instructions 列的第一个位置检索产品型号 ID、名称和生产步骤。
示例
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
/MI:root/MI:Location[1]/MI:step
')
FROM Production.ProductModel
FOR XML RAW ('ProductModelData')
GO
结果如下: 注意,该表仅存储某些产品型号的生产说明。 在结果中,生产步骤作为 <ProductModelData> 元素的子元素返回。
<ProductModelData ProductModelID="5" Name="HL Mountain Frame" />
<ProductModelData ProductModelID="6" Name="HL Road Frame" />
<ProductModelData ProductModelID="7" Name="HL Touring Frame">
<MI:step> ... </MI:step>
<MI:step> ... </MI:step>
</ProductModelData>
如果查询为 XQuery 返回的 XML 指定列名(如以下 SELECT 语句中所指定),则生产步骤将包含在具有指定名称的元素中。
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
/MI:root/MI:Location[1]/MI:step
') as ManuSteps
FROM Production.ProductModel
FOR XML RAW ('ProductModelData')
go
结果如下:
<ProductModelData ProductModelID="5" Name="HL Mountain Frame" />
<ProductModelData ProductModelID="6" Name="HL Road Frame" />
<ProductModelData ProductModelID="7" Name="HL Touring Frame">
<ManuSteps>
<MI:step ... </MI:step>
<MI:step ... </MI:step>
</ManuSteps>
</ProductModelData>
以下查询将指定 ELEMENTS 指令。 因此,返回的结果以元素为中心。 即使行集中的对应列为 NULL,与 ELEMENTS 指令一起指定的 XSINIL 选项仍可以返回 <ManuSteps> 元素。
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
/MI:root/MI:Location[1]/MI:step
') as ManuSteps
FROM Production.ProductModel
FOR XML RAW ('ProductModelData'), root('MyRoot'), ELEMENTS XSINIL
go
结果如下:
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
<ProductModelData>
<ProductModelID>6</ProductModelID>
<Name>HL Road Frame</Name>
<ManuSteps xsi:nil="true" />
</ProductModelData>
<ProductModelData>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuSteps>
<MI:step ... </MI:step>
<MI:step ...</MI:step>
...
</ManuSteps>
</ProductModelData>
</MyRoot>