Boole Değerlerindeki İşlevler - İşlev Değil

Şunlar için geçerlidir: SQL Server

$arg'nin etkin Boolean değeri yanlışsa TRUE, $arg'nin etkin Boolean değeri doğruysa FALSE döndürür.

Syntax

  
fn:not($arg as item()*) as xs:boolean  

Arguments

$arg
Etkili bir Boolean değeri olan bir öğe dizisi.

Examples

Bu konu, AdventureWorks veritabanındaki çeşitli xml türü sütunlarında depolanan XML örneklerine karşı XQuery örnekleri sağlar.

A. not() XQuery fonksiyonunu kullanarak katalog açıklamalarında <Spesifikasyon> öğesi bulunmayan ürün modellerini bulmak.

Aşağıdaki sorgu, katalog açıklamalarında bu öğe bulunmayan <Specifications> ürün modelleri için ürün modeli kimliklerini içeren XML oluşturur.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)  
SELECT ProductModelID, CatalogDescription.query('  
       <Product   
           ProductModelID="{ sql:column("ProductModelID") }"  
        />  
') as Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('  
     /pd:ProductDescription[not(pd:Specifications/*)]  '  
     ) = 0  

Önceki sorgudan aşağıdakilere dikkat edin:

  • Belge isim uzayları kullandığı için, örnek WITH NAMESPACES ifadesini kullanır. Bir diğer seçenek ise, XQuery Prolog'dakideclare namespace anahtar kelimesini kullanarak preeki tanımlamaktır.

  • Sorgu daha sonra öğeyi <Product> ve ProductModelID niteliğini içeren XML'i oluşturur.

  • WHERE cümlesi, satır filtrelemek için exist() yöntemini (XML veri türü) kullanır. exist() yöntemi, <ProductDescription> öğelerinde Specification <> alt elemanı olmayan varsa True döner. not() fonksiyonunun kullanımına dikkat edin.

Bu sonuç kümesi boştur, çünkü her ürün modeli kataloğu açıklaması Teknik Özellikler> öğesini içerir<.

B. MachineHours özniteliği olmayan iş merkezi konumlarını almak için not() XQuery fonksiyonunu kullanmak

Aşağıdaki sorgu, Talimatlar sütununa karşı belirtilmiştir. Bu sütun, ürün modelleri için üretim talimatlarını depolar.

Belirli bir ürün modeli için, sorgu MachineHours belirtmeyen iş merkezi konumlarını alır. Yani, Konum> öğesi için MachineHours özniteliği belirtilmemiştir<.

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;  
     for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]  
     return  
       <Location LocationID="{ $i/@LocationID }"   
                   LaborHrs="{ $i/@LaborHours }" >  
        </Location>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7   

Önceki sorguda aşağıdakilere dikkat edin:

  • XQuery Prolog'dakideclarenamespace, Adventure Works üretim talimatları isim alanı önekini tanımlar. Üretim talimatları belgesinde kullanılan aynı isim alanını temsil eder.

  • Sorguda, not(@MachineHours) önlemi MachineHours özniteliği yoksa True döner.

Sonuç şu şekildedir:

ProductModelID Result   
-------------- --------------------------------------------  
7              <Location LocationID="30" LaborHrs="1"/>  
               <Location LocationID="50" LaborHrs="3"/>  
               <Location LocationID="60" LaborHrs="4"/>  

Uygulama Sınırlamaları

Sınırlamalar şunlardır:

  • not() fonksiyonu yalnızca xs:boolean, node()* tipindeki argümanları veya boş diziyi destekler.