Esempio: esecuzione di query sulle colonne di tipo XMLExample: Querying XMLType Columns

Nella query seguente sono incluse colonne di tipo xml .The following query includes columns of xml type. 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 .The query retrieves product model ID, name, and manufacturing steps at the first location from the Instructions column of the xml type.

EsempioExample

USE AdventureWorks2012;  
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.The following is the result. Si noti che nella tabella sono archiviate le istruzioni di produzione relative unicamente ad alcuni modelli del prodotto.Note that the table stores manufacturing instructions for only some product models. Nel risultato, le fasi di produzione vengono restituite come sottoelementi dell'elemento <ProductModelData>.The manufacturing steps are returned as subelements of the <ProductModelData> element in the result.

<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.If the query specifies a column name for the XML returned by the XQuery, as specified in the following SELECT statement, the manufacturing steps are wrapped in the element that has the specified name.

USE AdventureWorks2012;  
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:This is the result:

<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 .The following query specifies the ELEMENTS directive. e pertanto il risultato restituito sarà incentrato sugli elementi.Therefore, the result returned is element-centric. L'opzione XSINIL specificata insieme alla direttiva ELEMENTS restituisce gli elementi <ManuSteps> anche se la colonna corrispondente nel set di righe è NULL.The XSINIL option specified with the ELEMENTS directive returns the <ManuSteps> elements, even if the corresponding column in the rowset is NULL.

USE AdventureWorks2012;  
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:This is the result:

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

Utilizzo della modalità RAW con FOR XMLUse RAW Mode with FOR XML