Operatorzy XQuery przeciwko typ danych xml

XQuery obsługuje następujące operatory:

  • Operatorzy numeryczne (+, -, *, div mod)

  • Operatory porównania wartości (eq, ne, lt, gt, le, ge)

  • Operatory porównania ogólne (=,! =, <, >, <=, >=)

Aby uzyskać więcej informacji o tych operatorów Zobacz Porównanie wyrażeń (XQuery)

Przykłady

A.Za pomocą operatorów ogólne

Kwerenda ilustruje użycie ogólne podmiotów gospodarczych, które mają zastosowanie do sekwencji oraz porównania sekwencji.Kwerenda pobiera sekwencji numerów telefonów dla każdego klienta z AdditionalContactInfo kolumna osoby tabela.Ta sekwencja następnie jest porównywana z sekwencji dwa numery telefonu ("111-111-1111", "222-2222").

W kwerendzie użyto = operator porównania.Każdy węzeł w sekwencji po prawej stronie = operator jest porównywana z każdego węzła w sekwencji po lewej stronie.Jeśli węzły, porównanie węzła jest TRUE.Jest następnie konwertowana int i w porównaniu z 1 i kwerenda zwraca identyfikator klienta.

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 BusinessEntityID 
FROM   Person.Person
WHERE  AdditionalContactInfo.value('
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number = 
          ("111-111-1111", "222-2222")',
      'bit')= cast(1 as bit);

Istnieje inny sposób obserwować, jak działa poprzedniej kwerendy: Każdy Telefon Telefon wartość liczby pobierane z AdditionalContactInfo kolumna jest porównywana z zestaw dwa numery telefonu.Jeśli wartość jest w zestaw, klienta jest zwracany w wyniku.

B.Za pomocą operator numeryczne

+ Operatora w tej kwerendzie jest operator wartości, ponieważ dotyczy pojedynczego element.Na przykład wartość 1 dodaje się wielkość partii, zwrócony przez kwerendę:

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.Za pomocą operator wartość

Następujące kwerendy pobiera <Picture> elementów modelu produktu, w którym rozmiar obrazu jest "małe":

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;

Ponieważ argumenty do eq operator niepodzielny wartości, używany jest operator wartości w kwerendzie.Można napisać tej samej kwerendy za pomocą operator porównania ogólne ( = ).