MSDN Library
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern

query()-Methode (xml-Datentyp)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

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.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Azure SQL-Datenbank.
  
query ('XQuery')  

XQuery
Ist eine Zeichenfolge (ein XQuery-Ausdruck), die XML-Knoten wie z. B. element- und attribute-Knoten in einer XML-Instanz abfragt.

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="http://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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
declare namespace wm="http://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 (  
   'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
   'http://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  

Hinzufügen von Namespaces zu Abfragen mit WITH XMLNAMESPACES
Vergleichen von typisiertem XML mit nicht typisiertem XML
Erstellen von Instanzen der XML-Daten
xml-Datentypmethoden
XML DML (Data Modification Language)

Community-Beiträge

Anzeigen:
© 2016 Microsoft