Esempio: esecuzione di query sulle colonne di tipo XML
Si applica a: SQL Server Database SQL di Azure Istanza 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>