Exemple : interrogation de colonnes de type XML
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
La requête ci-dessous inclut des colonnes de type xml . Elle extrait l’ID de modèle de produit, le nom et les étapes de fabrication dans le premier emplacement à partir de la colonne Instructions
de type xml .
Exemple
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
Le résultat est le suivant. La table stocke les instructions de fabrication de certains modèles de produits uniquement. Les étapes de fabrication sont retournées comme sous-éléments de l'élément <ProductModelData>
dans le résultat.
<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 requête spécifie un nom de colonne pour les données XML retournées par la requête XQuery, comme spécifié dans l'instruction SELECT
ci-dessous, les étapes de fabrication sont incluses dans l'élément qui possède le nom spécifié.
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
Voici le résultat obtenu :
<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 requête suivante spécifie la directive ELEMENTS
. Par conséquent, le résultat retourné est centré sur les éléments. L'option XSINIL
spécifiée avec la directive ELEMENTS
retourne les éléments <ManuSteps>
, même si la colonne correspondante dans l'ensemble de lignes est 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
Voici le résultat obtenu :
<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>