Aracılığıyla paylaş


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

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

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

  • Değer karşılaştırması (eq, ne, lt, gt, le, ge) 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 dizileri 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ı bir dizi alır AdditionalContactInfo sütununda kişi tablosu. Bu dizi daha sonra iki telefon numaraları ("111-111-1111", "222-2222") sırası ile karşılaştırılır.

Sorgu kullanır = karşılaştırma işleci. Her düğümü sağ tarafında sıradaki = işleci 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 gerçek. Onun ardından bir int'e dönüştürülür ve 1 ile karşılaştırıldığında ve sorgu, müşteri kimliği döndürür.

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)

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)

Önceki sorgu nasıl çalıştığını gözlemlemek için başka bir yol: dan alınan her telefon telefon numarası değeri AdditionalContactInfo sütun iki telefon numaraları kümesi ile karşılaştırılır. Değer kümesinde ise müşteri sonucu döndürülür.

B.Bir sayısal işleci kullanma

+ İşleci bu sorgu değeri operatörü, çü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

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.Bir değer işleci kullanma

Aşağıdaki sorgu alır <Picture> öğeleri nerede resim boyutunu "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

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şlenenleri eq operatör atomik değerleri, sorguda değer işleci kullanılır. Genel karşılaştırma işlecini kullanarak aynı sorgu yazabilirsiniz ( = ).

Ayrıca bkz.

Başvuru

Xml veri türü karşı XQuery işlevleri

Kavramlar

DEL - Implementing XML in SQL Server

Diğer Kaynaklar

XQuery dil başvurusu (SQL Server)