Freigeben über


XQuery-Operatoren für den xml-Datentyp

Gilt für:SQL Server

XQuery unterstützt die folgenden Operatoren:

  • Numerische Operatoren (+, -, *, div, mod)

  • Operatoren für Wertvergleiche (eq, ne, lt, gt, le, ge)

  • Operatoren für den allgemeinen Vergleich ( =, !=, <, >, <=, >= )

Weitere Informationen zu diesen Operatoren finden Sie unter Vergleichsausdrücke (XQuery).

Beispiele

A. Verwenden von allgemeinen Operatoren

Die folgende Abfrage zeigt die Verwendung allgemeiner Operatoren, die für Sequenzen gelten, sowie das Vergleichen von Sequenzen. Die Abfrage ruft eine Sequenz von Telefonnummern für jeden Kunden aus der Spalte AdditionalContactInfo der Tabelle Kontakt ab. Diese Sequenz wird dann mit der Sequenz von zwei Rufnummern ("111-111-1111", "222-2222") verglichen.

Die Abfrage verwendet den Vergleichsoperator = . Jeder Knoten in der Sequenz auf der rechten Seite des = Operators wird mit jedem Knoten in der Sequenz auf der linken Seite verglichen. Wenn die Knoten übereinstimmen, ist der Knotenvergleich TRUE. Der Wert wird anschließend in einen int-Wert konvertiert und mit 1 verglichen; die Abfrage gibt dann die Kunden-ID zurück.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)  
SELECT ContactID   
FROM   Person.Contact  
WHERE  AdditionalContactInfo.value('  
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =   
          ("111-111-1111", "222-2222")',  
      'bit')= cast(1 as bit)  

Es gibt eine andere Möglichkeit, die Funktionsweise der vorherigen Abfrage zu beobachten: Jeder aus der Spalte AdditionalContactInfo abgerufene Telefonnummernwert wird mit dem Satz von zwei Telefonnummern verglichen. Wenn der Wert im Satz enthalten ist, wird der betreffende Kunde im Ergebnis zurückgegeben.

B. Verwenden eines numerischen Operators

Der +-Operator in dieser Abfrage ist ein Wertoperator, weil er sich auf ein einzelnes Element bezieht. Der Wert 1 wird z. B. zu einer Chargengröße addiert, die von der Abfrage zurückgegeben wird:

SELECT ProductModelID, Instructions.query('  
     declare namespace   
 AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
     for $i in (/AWMI:root/AWMI:Location)[1]  
     return   
       <Location LocationID="{ ($i/@LocationID) }"  
                   LotSize  = "{  number($i/@LotSize) }"  
                   LotSize2 = "{ number($i/@LotSize) + 1 }"  
                   LotSize3 = "{ number($i/@LotSize) + 2 }" >  
  
       </Location>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

C. Verwenden eines Wertoperators

Die folgende Abfrage ruft die <Picture> Elemente für ein Produktmodell ab, bei dem die Bildgröße "klein" ist:

SELECT CatalogDescription.query('  
     declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]  
     return  
           $P  
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

Da beide Operanden für den Eq-Operator atomische Werte sind, wird der Wertoperator in der Abfrage verwendet. Sie können dieselbe Abfrage schreiben, indem Sie den allgemeinen Vergleichsoperator ( = ) verwenden.

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp
XML-Daten (SQL Server)
XQuery-Sprachreferenz (SQL Server)