Ejemplo: Consultar columnas de tipo XML
La consulta siguiente incluye columnas de tipo xml. La consulta recupera el identificador, nombre y pasos de fabricación del modelo de producto en la primera ubicación de la columna Instructions de tipo xml.
Ejemplo
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
A continuación se muestra el resultado. Tenga en cuenta que la tabla almacena las instrucciones de fabricación solo de algunos modelos de productos. Los pasos de fabricación se devuelven como subelementos del elemento <ProductModelData> en el resultado.
<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>
Si la consulta especifica un nombre de columna para el XML devuelto por la consulta XQuery, como se especifica en la siguiente instrucción SELECT, los pasos de fabricación se incluyen en el elemento que tiene el nombre especificado.
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
El resultado es el siguiente:
<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>
En la consulta siguiente se especifica la directiva ELEMENTS. Por tanto, el resultado devuelto está centrado en elementos. La opción XSINIL especificada junto con la directiva ELEMENTS devuelve los elementos <ManuSteps>, aunque la columna correspondiente del conjunto de resultados sea NULL.
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
El resultado es el siguiente:
<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>