Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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)