query()-Methode (xml-Datentyp)

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

Gibt eine XQuery für eine Instanz des xml-Datentyps an. Das Ergebnis ist vom Typ xml. Die Methode gibt eine Instanz nicht typisierten XMLs zurück.

Syntax

query ('XQuery')  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

XQuery
Ist eine Zeichenfolge (ein XQuery-Ausdruck), die XML-Knoten wie z.B. element- und attribute-Knoten in einer XML-Instanz abfragt.

Beispiele

Dieser Abschnitt enthält Beispiele für das Verwenden der query()-Methode des xml-Datentyps.

A. Verwenden der query()-Methode mit einer Variablen vom Typ XML

Das folgende Beispiel deklariert die Variable @myDoc des Typs xml und weist dieser dann eine XML-Instanz zu. Die query() -Methode wird anschließend zum Angeben einer XQuery für das Dokument verwendet.

Die Abfrage ruft das untergeordnete <Features>-Element des <ProductDescription>-Elements ab:

DECLARE @myDoc XML  
SET @myDoc = '<Root>  
<ProductDescription ProductID="1" ProductName="Road Bike">  
<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>  
</ProductDescription>  
</Root>'  
SELECT @myDoc.query('/Root/ProductDescription/Features')  

Die folgende Ausgabe zeigt das Ergebnis:

<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>        

B. Verwenden der query()-Methode für eine Spalte vom Typ XML

Im folgenden Beispiel wird die query() -Methode zum Angeben einer XQuery für die CatalogDescription-Spalte vom Typ xml in der AdventureWorks-Datenbank verwendet:

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />  
') as Result  
FROM Production.ProductModel  
where CatalogDescription.exist('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";  
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1  

Beachten Sie hinsichtlich der vorherigen Abfrage folgende Punkte:

  • Die CatalogDescription-Spalte ist eine typisierte xml-Spalte, d.h., ihr ist eine Schemasammlung zugeordnet. Im XQuery-Prolog definiert das namespace-Schlüsselwort das Präfix, das später im Abfragetext verwendet wird.

  • Die query()-Methode erstellt in XML ein <Product>-Element mit einem ProductModelID-Attribut, dessen ProductModelID-Attributwert aus der Datenbank abgerufen wird. Weitere Informationen zur XML-Konstruktion finden Sie unter XML-Konstruktion (XQuery).

  • Die exist()-Methode (XML-Datentyp) in der WHERE-Klausel sucht nur Zeilen, die das <Warranty>-Element im XML-Code enthalten. Auch hier definiert das namespace-Schlüsselwort zwei Namespacepräfixe.

Die folgende Ausgabe zeigt das Teilergebnis:

<Product ProductModelID="19"/>   
<Product ProductModelID="23"/>   
...  

Beachten Sie, dass sowohl die query()- als auch die exist()-Methode das PD-Präfix deklariert. In diesen Fällen können Sie WITH XMLNAMESPACES verwenden, um zuerst die Präfixe zu definieren und dann in der Abfrage zu verwenden.

WITH XMLNAMESPACES 
(  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS WM
)  
SELECT CatalogDescription.query('<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />')
       AS Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('/PD:ProductDescription/PD:Features/WM:Warranty ') = 1;

Weitere Informationen

Hinzufügen von Namespaces zu Abfragen mit WITH XMLNAMESPACES
Vergleichen von typisiertem XML mit nicht typisiertem XML
Erstellen von Instanzen der XML-Daten
xml Data Type Methods (xml-Datentypmethoden)
XML DML (Data Modification Language)