Nicel İfadeler (XQuery)

Şunlar için geçerlidir: SQL Server

Varoluşsal ve evrensel niceleyiciler, iki diziye uygulanan Boolean operatörler için farklı anlamlar belirtir. Bu aşağıdaki tabloda gösterilmiştir.

Varoluşsal niceletici
İki dizi verildiğinde, birinci dizideki herhangi bir öğe ikinci dizide eşleşirse, kullanılan karşılaştırma operatörüne göre döndürülen değer Doğrudur.

Evrensel nicelikçi
İki dizi verildiğinde, birinci dizideki her öğe ikinci dizide eşleşiyorsa, döndürülen değer Doğrudur.

XQuery, nicel ifadeleri aşağıdaki biçimde destekler:

( some | every ) <variable> in <Expression> (,...) satisfies <Expression>  

Bu ifadeleri, bir veya birkaç dizi üzerinde bir ifadeye varoluşsal veya evrensel niceltme uygulamak için sorguda kullanabilirsiniz. SQL Server'da, cümledeki satisfies ifade şu durumlardan birine yol açmalıdır: bir düğüm dizisi, boş bir dizi veya bir Boolean değeri. Bu ifadenin sonucunun etkin Boolean değeri nicelendirmede kullanılır. Bir miktar kullanan varoluşsal niceltme, niceleyiciyle sınırlanan değerlerden en az birinin True sonucu elde ettiği ifadede True döner. Her şeyi kullanan evrensel niceltme, niceleyiciyle sınırlanan tüm değerler için True olmalıdır.

Örneğin, aşağıdaki sorgu, her <Konum> öğesini Konum Kimliği özniteliği olup olmadığını kontrol eder.

SELECT Instructions.query('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
        if (every $WC in //AWMI:root/AWMI:Location   
            satisfies $WC/@LocationID)  
        then  
             <Result>All work centers have workcenterLocation ID</Result>  
         else  
             <Result>Not all work centers have workcenterLocation ID</Result>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Konum Kimliği, <Konum> öğesinin gerekli bir özniteliği olduğundan, beklenen sonucu alırsınız:

<Result>All work centers have Location ID</Result>   

query() yöntemini kullanmak yerine, aşağıdaki sorguda gösterildiği gibi sonucu ilişkisel dünyaya döndürmek için value() yöntemini kullanabilirsiniz. Tüm iş merkezi konumlarında LocationID özellikleri varsa, sorgu True döner. Aksi takdirde, sorgu Yanlış döner.

SELECT Instructions.value('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
        every $WC in  //AWMI:root/AWMI:Location   
            satisfies $WC/@LocationID',   
  'nvarchar(10)') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Aşağıdaki sorgu, ürün fotoğraflarından birinin küçük olup olmadığını kontrol eder. Ürün kataloğu XML'de, her farklı boyuttaki ürün resmi için çeşitli açılar saklanır. Her ürün kataloğunun XML'inde en az bir küçük boyutlu resim bulunduğundan emin olmak isteyebilirsiniz. Aşağıdaki sorgu bunu başarıyor:

SELECT ProductModelID, CatalogDescription.value('  
     declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     some $F in /PD:ProductDescription/PD:Picture  
        satisfies $F/PD:Size="small"', 'nvarchar(20)') as SmallPicturesStored  
FROM Production.ProductModel  
WHERE ProductModelID = 19  

Bu kısmi bir sonuçdur:

ProductModelID SmallPicturesStored   
-------------- --------------------  
19             true        

Uygulama Sınırlamaları

Sınırlamalar şunlardır:

  • Tür belirti, nicelendirilmiş ifadelerde değişkenin bağlanmasının bir parçası olarak desteklenmez.