Ejemplo: consulta de columnas de tipo XML

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

La consulta siguiente incluye columnas de tipo xml . La consulta recupera el identificador, el nombre y los pasos de fabricación del modelo de producto en la primera ubicación de la columna Instructions de tipo xml .

Ejemplo

USE AdventureWorks2022;
GO
SELECT ProductModelID, Name,
   Instructions.query('
declare namespace MI="http://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. 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 AdventureWorks2022;
GO
SELECT ProductModelID, Name,
   Instructions.query('
declare namespace MI="http://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 AdventureWorks2022;
GO
SELECT ProductModelID, Name,
   Instructions.query('
declare namespace MI="http://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>

Consulte también