Esempio: esecuzione di query sulle colonne di tipo XML

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Nella query seguente sono incluse colonne di tipo xml . La query recupera l'ID del modello del prodotto, il nome e le fasi di produzione nel primo centro di lavorazione dalla colonna Instructions di tipo xml .

Esempio

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

Di seguito è riportato il risultato. Nella tabella sono archiviate le istruzioni di produzione relative unicamente ad alcuni modelli del prodotto. Nel risultato, le fasi di produzione vengono restituite come sottoelementi dell'elemento <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>

Se la query specifica un nome di colonna per il codice XML restituito dalla query XQuery, come illustrato nell'istruzione SELECT seguente, viene eseguito il wrapping delle fasi di produzione nell'elemento con il nome specificato.

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

Risultato:

<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>

La query seguente specifica la direttiva ELEMENTS . e pertanto il risultato restituito sarà incentrato sugli elementi. L'opzione XSINIL specificata insieme alla direttiva ELEMENTS restituisce gli elementi <ManuSteps> anche se la colonna corrispondente nel set di righe è 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

Risultato:

<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>

Vedi anche