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 Comparison Expressions (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 Abfolge 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 WAHR. 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 weitere Möglichkeit, zu beobachten, wie die vorherige Abfrage funktioniert: Jeder aus der Spalte "AdditionalContactInfo " abgerufene Telefonnummernwert wird mit der Gruppe 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 atomisch sind, wird der Wertoperator in der Abfrage verwendet. Sie können dieselbe Abfrage mit dem allgemeinen Vergleichsoperator ( = ) schreiben.

Weitere Informationen

XQuery Functions against the xml Data Type (XQuery-Funktionen für den xml-Datentyp)
XML-Daten (SQL Server)
XQuery-Sprachreferenz (SQL Server)