Beispiel: Angeben der ELEMENT-Direktive und Entitätscodierung

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Dieses Beispiel veranschaulicht den Unterschied zwischen der ELEMENT - und der XML -Direktive. Die ELEMENT-Direktive wandelt die Daten in Entitätsreferenzen um, die XML-Direktive hingegen nicht. Dem <Summary>-Element wird in der Abfrage XML zugewiesen: <Summary>This is summary description</Summary>.

Hinweis

In Azure SQL-Datenbank und SQL Database in Microsoft Fabric ist die Anweisung USE nicht verfügbar. Stattdessen verbinden Sie sich direkt mit der vorgesehenen Datenbank und führen Sie den Rest des Codebeispiels aus.

Betrachten Sie die folgende Abfrage:

USE AdventureWorks2022;
GO
SELECT  1 as Tag,
        0 as Parent,
        ProductModelID  as [ProductModel!1!ProdModelID],
        Name            as [ProductModel!1!Name],
        NULL            as [Summary!2!SummaryDescription!ELEMENT]
FROM    Production.ProductModel
WHERE   ProductModelID=19
UNION ALL
SELECT  2 as Tag,
        1 as Parent,
        ProductModelID,
        NULL,
       '<Summary>This is summary description</Summary>'
FROM   Production.ProductModel
WHERE  ProductModelID = 19
FOR XML EXPLICIT;

Dies ist das Ergebnis. Die Zusammenfassungsbeschreibung wird im Ergebnis in eine Entität geändert.

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription><Summary>This is summary description</Summary></SummaryDescription>
  </Summary>
</ProductModel>

Wenn Sie nun im Spaltennamen die XML-Direktive, also Summary!2!SummaryDescription!XML, anstelle der ELEMENT-Direktive angeben, erhalten Sie die Zusammenfassungsbeschreibung ohne Entitisierung.

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription>
      <Summary>This is summary description</Summary>
    </SummaryDescription>
  </Summary>
</ProductModel>

Die folgende Abfrage weist keinen statischen XML-Wert zu, sondern verwendet die query()-Methode vom xml-Typ, um die Produktmodell-Zusammenfassungsbeschreibung aus der CatalogDescription-Spalte vom xml-Typ abzurufen. Da bekannt ist, dass das Ergebnis vom Typ xml ist, werden die Daten nicht in Entitäten geändert.

SELECT  1 as Tag,
        0 as Parent,
        ProductModelID  as [ProductModel!1!ProdModelID],
        Name            as [ProductModel!1!Name],
        NULL            as [Summary!2!SummaryDescription]
FROM    Production.ProductModel
WHERE   CatalogDescription is not null
UNION ALL
SELECT  2 as Tag,
        1 as Parent,
        ProductModelID,
        Name,
       (SELECT 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],Tag
FOR XML EXPLICIT;