Partager via


Exemple : Spécifier la directive HIDE

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cet exemple illustre l'utilisation de la directive HIDE . Cette directive est utile lorsque vous souhaitez que la requête retourne un attribut pour classer les lignes dans la table universelle retournée par la requête, mais que vous ne souhaitez pas cet attribut dans le document XML final résultant.

Cette requête construit le document XML suivant :

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription>
           <Summary> element from XML stored in CatalogDescription column
    </SummaryDescription>
  </Summary>
</ProductModel>

Cette requête génère le document XML souhaité. Elle identifie deux groupes de colonnes possédant 1 et 2 comme valeurs Tag dans les noms de colonnes.

Cette requête utilise la méthode query() (type de données xml) du type de données xml pour interroger la colonne CatalogDescription de type xml afin d’extraire la description résumée. Elle utilise également la méthode value() (type de données xml) du type de données xml pour extraire la valeur ProductModelID de la colonne CatalogDescription. Cette valeur n’est pas obligatoire dans le code XML résultant, mais elle est nécessaire pour trier l’ensemble de lignes résultant. Par conséquent, le nom de colonne, [Summary!2!ProductModelID!HIDE], inclut la directive HIDE . Si cette colonne n’est pas incluse dans l’instruction SELECT, vous devez trier l’ensemble de lignes par [ProductModel!1!ProdModelID] et [Summary!2!SummaryDescription] c’est le type xml et vous ne pouvez pas utiliser la colonne de type xml dans ORDER BY. Par conséquent, la colonne supplémentaire [Summary!2!ProductModelID!HIDE] est ajoutée et est ensuite spécifiée dans la clause ORDER BY.

USE AdventureWorks2022;
GO
SELECT  1 as Tag,
        0 as Parent,
        ProductModelID     as [ProductModel!1!ProdModelID],
        Name               as [ProductModel!1!Name],
        NULL               as [Summary!2!ProductModelID!hide],
        NULL               as [Summary!2!SummaryDescription]
FROM    Production.ProductModel
WHERE   CatalogDescription is not null
UNION ALL
SELECT  2 as Tag,
        1 as Parent,
        ProductModelID,
        Name,
        CatalogDescription.value('
         declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
       (/PD:ProductDescription/@ProductModelID)[1]', 'int'),
        CatalogDescription.query('
         declare namespace pd="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
         /pd:ProductDescription/pd:Summary')
FROM    Production.ProductModel
WHERE   CatalogDescription is not null
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]
FOR XML EXPLICIT;
GO

Voici le résultat obtenu :

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription>
      <pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">
        <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>
      </pd:Summary>
    </SummaryDescription>
  </Summary>
</ProductModel>

Voir aussi