XQuery İşletmenleri karşı xml veri türü

XQuery aşağıdaki işleçleri destekler:

  • Sayısal işleç (+, -, *, div mod)

  • (Eq, ne, lt, gt, le, ge) değer karşılaştırma işleçleri

  • Genel karşılaştırma işleçleri (=,! =, <, >, <=, >=)

Bu işleçleri hakkında daha fazla bilgi için bkz: Karşılaştırma ifadeleri (XQuery)

Örnekler

A.Genel işleçleri kullanma

Sorgu serileri de dizileri karşılaştırmak için geçerli genel işleçler kullanımını göstermektedir.Sorgu için her müşterinin telefon numaralarının sırasını alır AdditionalContactInfo sütunu kişi tablo.Bu sıra, daha sonra iki telefon numarası ("111-111-1111", "222 Güneş") sırası ile karşılaştırılır.

Sorguyu kullanır = karşılaştırma işleç.Her düğümü sağ tarafında sıradaki = işleç sol tarafında sıradaki her düğüm ile karşılaştırılır.Eşleşen düğümler, düğüm karşılaştırma ise doğru.Bu bir int'e dönüştürülür ve 1 ile karşılaştırıldığında ve sorgu müşteri kodunu verir.

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);

Önceki sorgu nasıl çalıştığını görmek için başka bir yolu vardır: Alınan her telefon telefon numarası değeri AdditionalContactInfo sütun küme iki telefon numaraları ile karşılaştırıldığında.Değer küme içinde ise, o müşteri sonucu döndürülür.

B.Sayısal işleç kullanma

+ işleç Bu sorguyu bir değer olan işleç, çünkü tek bir öğeye uygulanır.Örneğin, 1 değeri sorgu tarafından döndürülen bir lot boyutu eklenir:

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.Değer işleç kullanma

Aşağıdaki sorgu alır <Picture> öğeleri burada resim boyutu, "küçük" bir ürün modeli için:

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;

Çünkü her iki işlenen eq iþlecidir Atomik değerleri, sorguda değer işleç kullanılır.Genel karşılaştırma kullanarak aynı sorgu yazabilirsiniz işleç ( = ).