XQuery-operatorer mot xml-datatypen

gäller för:SQL Server

XQuery stöder följande operatorer:

  • Numeriska operatorer (+, -, *, div, mod)

  • Operatorer för värdejämförelse (eq, ne, lt, gt, le, ge)

  • Operatorer för allmän jämförelse ( =, !=, <, >, <=, >= )

Mer information om dessa operatorer finns i Jämförelseuttryck (XQuery)

Exempel

A. Använda allmänna operatorer

Frågan illustrerar användningen av allmänna operatorer som gäller för sekvenser och även för att jämföra sekvenser. Frågan hämtar en sekvens med telefonnummer för varje kund från kolumnen AdditionalContactInfo i tabellen Kontakt. Den här sekvensen jämförs sedan med sekvensen med två telefonnummer ("111-111-1111", "222-2222").

Frågan använder = jämförelseoperator. Varje nod i sekvensen på höger sida av =-operatorn jämförs med varje nod i sekvensen till vänster. Om noderna matchar är nodjämförelsen TRUE. Den konverteras sedan till en int och jämförs med 1, och frågan returnerar kund-ID:t.

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)  

Det finns ett annat sätt att se hur den tidigare frågan fungerar: Varje telefonnummervärde som hämtas från kolumnen AdditionalContactInfo jämförs med uppsättningen med två telefonnummer. Om värdet finns i uppsättningen returneras den kunden i resultatet.

B. Använda en numerisk operator

Operatorn + i den här frågan är en värdeoperator eftersom den gäller för ett enskilt objekt. Till exempel läggs värdet 1 till i en partistorlek som returneras av frågan:

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. Använda en värdeoperator

Följande fråga hämtar de <Picture> elementen för en produktmodell där bildstorleken är "liten":

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  

Eftersom båda operanderna till eq operatorn är atomiska värden, används värdeoperatorn i frågan. Du kan skriva samma fråga med hjälp av den allmänna jämförelseoperatorn ( = ).