Partager via


Exemple: interrogation de colonnes de type XML

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

Le résultat est le suivant. Notez que 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 AdventureWorks2008R2;
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

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

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>

Voir aussi

Référence