Sdílet prostřednictvím


XQuery – operátory proti datovému typu XML

platí pro:SQL Server

XQuery podporuje následující operátory:

  • Číselné operátory (+, -, *, div, mod)

  • Operátory pro porovnání hodnot (eq, ne, lt, gt, le, ge)

  • Operátory pro obecné porovnání ( =, !=, <, >, <=, >= )

Další informace o těchto operátorech najdete v tématu porovnání výrazů (XQuery)

Příklady

A. Použití obecných operátorů

Dotaz znázorňuje použití obecných operátorů, které se vztahují na sekvence, a také pro porovnání sekvencí. Dotaz načte posloupnost telefonních čísel pro každého zákazníka ze sloupce AdditionalContactInfo tabulky Kontakt. Tato posloupnost se pak porovná se sekvencí dvou telefonních čísel ("111-111-1111", "222-2222").

Dotaz používá operátor porovnání =. Každý uzel v sekvenci na pravé straně operátoru = se porovnává s každým uzlem v sekvenci na levé straně. Pokud se uzly shodují, porovnání uzlů je TRUE. Potom se převede na int a porovná se s 1 a dotaz vrátí ID zákazníka.

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)  

Existuje jiný způsob, jak zjistit, jak předchozí dotaz funguje: Každá hodnota telefonního čísla načtená ze sloupce AdditionalContactInfo se porovná se sadou dvou telefonních čísel. Pokud je hodnota v sadě, vrátí se zákazníkovi výsledek.

B. Použití číselného operátoru

Operátor + v tomto dotazu je operátor hodnoty, protože se vztahuje na jednu položku. Například hodnota 1 se přidá do velké velikosti, která je vrácena dotazem:

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. Použití operátoru hodnoty

Následující dotaz načte prvky <Picture> modelu produktu, kde je velikost obrázku malá:

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  

Vzhledem k tomu, že oba operandy eq operátor jsou atomické hodnoty, použije se v dotazu operátor hodnoty. Stejný dotaz můžete napsat pomocí obecného relačního operátoru (=).

Viz také

funkce XQuery proti datového typu XML
dat XML (SQL Server)
jazyka XQuery (SQL Server)