Condividi tramite


Esempio: esecuzione di query sulle colonne di tipo XML

Nella query seguente sono incluse colonne di tipo xml e vengono recuperati 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 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  

Di seguito è riportato il risultato. Si noti che nella tabella sono archiviate le istruzioni di produzione relative unicamente ad alcuni modelli del prodotto. I passaggi di produzione vengono restituiti come sottoelementi dell'elemento <ProductModelData> nel risultato.

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

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 con la ELEMENTS direttiva restituisce gli <ManuSteps> elementi, anche se la colonna corrispondente nel set di righe è 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  

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>  

Vedere anche

Usare la modalità RAW con FOR XML