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 mit einer Variablen 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 in XML ein <Product>-Element mit einem ProductModelID-Attribut, dessen 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 verwendet, um nur Zeilen zu suchen, die das <Warranty>-Element im XML-Code 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 zu Abfragen mit WITH XMLNAMESPACES
Vergleichen von typisiertem XML mit nicht typisiertem XML
Erstellen von Instanzen der XML-Daten
XML DML (Data Modification Language)