Teilen über


Beispiel: Angeben der HIDE-Direktive

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Beispiel wird die Verwendung der HIDE -Direktive veranschaulicht. Diese Direktive ist nützlich, wenn die Abfrage ein Attribut zurückgeben soll, um die Zeilen in der universellen Tabelle zu sortieren, die von der Abfrage zurückgegeben wird, aber Sie möchten dieses Attribut nicht im endgültigen resultierenden XML-Dokument.

Diese Abfrage konstruiert diese XML-Ausgabe:

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

Diese Abfrage generiert die gewünschte XML-Ausgabe. Die Abfrage identifiziert zwei Spaltengruppen, deren Spaltennamen die Tagwerte 1 und 2 aufweisen.

Diese Abfrage verwendet die query()-Methode (xml-Datentyp) vom Datentyp xml , um die CatalogDescription-Spalte vom Typ xml abzufragen und daraus die Zusammenfassungsbeschreibung abzurufen. Die Abfrage verwendet auch die value()-Methode (xml-Datentyp) vom Datentyp xml , um den ProductModelID-Wert aus der CatalogDescription-Spalte abzurufen. Dieser Wert ist im resultierenden XML-Code nicht erforderlich, ist jedoch erforderlich, um das resultierende Rowset zu sortieren. Deshalb beinhaltet der Spaltenname [Summary!2!ProductModelID!HIDE]die HIDE -Direktive. Wenn diese Spalte nicht in der SELECT-Anweisung enthalten ist, müssen Sie das Rowset [ProductModel!1!ProdModelID] nach xml-Typ [Summary!2!SummaryDescription]sortieren, und Sie können die XML-Typspalte in ORDER BY nicht verwenden. Daher wird die zusätzliche [Summary!2!ProductModelID!HIDE] Spalte hinzugefügt und dann in der ORDER BY-Klausel angegeben.

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

Dies ist das Ergebnis:

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

Siehe auch