query()-Methode (xml-Datentyp)
Gibt eine XQuery für eine Instanz des xml-Datentyps an. Das Ergebnis ist vom xml-Typ. 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 für eine Variable vom Typ xml
Das folgende Beispiel deklariert eine Variable @myDoc vom Typ 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')
Dies ist 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 Folgendes:
- Die CatalogDescription-Spalte ist eine typisierte xml-Spalte. Dies bedeutet, dass ihr eine Schemaauflistung zugeordnet wurde. Im XQuery-Prolog wird das namespace-Schlüsselwort zum Definieren des Präfixes verwendet, das später im Abfragetext verwendet wird.
- Die query()-Methode erstellt XML, ein <
Product
>-Element, das ein ProductModelID-Attribut besitzt, in dem der ProductModelID-Attributwert aus der Datenbank abgerufen wird. Weitere Informationen zur XML-Erstellung finden Sie unter XML-Konstruktion (XQuery). - Die exist()-Methode (XML-Datentyp) in der WHERE-Klausel wird zum Suchen ausschließlich nach den Zeilen verwendet, die das <
Warranty
>-Element im XML enthalten. Auch hier wird das namespace-Schlüsselwort zum Definieren von zwei Namespacepräfixen verwendet.
Dies ist das Teilergebnis:
<Product ProductModelID="19"/>
<Product ProductModelID="23"/>
...
Beachten Sie, dass die query()- und exist()-Methoden beide das PD-Präfix deklarieren. 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
Siehe auch
Konzepte
Hinzufügen von Namespaces mithilfe von WITH XMLNAMESPACES
Typisiertes im Vergleich zu nicht typisiertem XML
XML-Datentyp
Generieren von XML-Instanzen
XML DML (Data Modification Language)
XML-Beispielanwendungen