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.
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)