XQuery-operátorok az xml-adattípuson

A következőkre vonatkozik:SQL Server

Az XQuery a következő operátorokat támogatja:

  • Numerikus operátorok (+, -, *, div, mod)

  • Érték-összehasonlítás operátorai (eq, ne, lt, gt, le, ge)

  • Operátorok általános összehasonlításhoz ( =, !=, <, >, <=, >= )

További információ ezekről az operátorokról: Összehasonlító kifejezések (XQuery)

Példák

Egy. Általános operátorok használata

A lekérdezés bemutatja a sorozatokra vonatkozó általános operátorok használatát, valamint a sorozatok összehasonlítását. A lekérdezés a Kapcsolat tábla AdditionalContactInfo oszlopából kéri le az egyes ügyfelek telefonszámainak sorozatát. Ezt a sorozatot két telefonszám (111-111-1111", "222-2222") sorozatával hasonlítjuk össze.

A lekérdezés a = összehasonlító operátort használja. A = operátor jobb oldalán lévő sorozat minden csomópontját összehasonlítjuk a bal oldalon lévő sorozat minden csomópontjával. Ha a csomópontok egyeznek, a csomópontok összehasonlítása IGAZ. Ezt követően a rendszer int értékké alakítja, és összehasonlítja az 1-zel, és a lekérdezés visszaadja az ügyfélazonosító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)  

Az előző lekérdezés működését egy másik módon is megfigyelheti: A AdditionalContactInfo oszlopból lekért telefonszámok minden egyes értékét összehasonlítjuk két telefonszámkészlettel. Ha az érték a készletben van, a rendszer az adott ügyfelet adja vissza az eredményben.

B. Numerikus operátor használata

A + operátor ebben a lekérdezésben egy érték operátor, mivel egyetlen elemre vonatkozik. Az 1 értéket például hozzáadja egy olyan tételmérethez, amelyet a lekérdezés ad vissza:

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. Érték operátor használata

Az alábbi lekérdezés lekéri egy termékmodell <Picture> elemeit, ahol a kép mérete "kicsi":

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  

Mivel a eq operátor mindkét operandusa atomi érték, az érték operátort használja a lekérdezés. Ugyanezt a lekérdezést az általános összehasonlító operátor (=) használatával is megírhatja.

Lásd még:

XQuery-függvények xml adattípusú
XML-adatok (SQL Server)
XQuery Language Reference (SQL Server)