query()-Methode (xml-Datentyp)
Gilt für: SQL Server Azure SQL-Datenbank Azure 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')
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)