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)