Fungsi pada Nilai Boolean - bukan Fungsi

Berlaku untuk:SQL Server

Mengembalikan TRUE jika nilai Boolean yang efektif dari $arg salah, dan mengembalikan FALSE jika nilai Boolean yang efektif dari $arg adalah true.

Sintaks

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

Argumen

$arg
Urutan item yang ada nilai Boolean yang efektif.

Contoh

Topik ini menyediakan contoh XQuery terhadap instans XML yang disimpan di berbagai kolom jenis xml di database AdventureWorks.

J. Menggunakan fungsi not() XQuery untuk menemukan model produk yang deskripsi katalognya tidak menyertakan <elemen Spesifikasi> .

Kueri berikut membuat XML yang berisi ID model produk untuk model produk yang deskripsi katalognya tidak menyertakan <Specifications> elemen .

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  

Perhatikan hal berikut ini dari kueri sebelumnya:

  • Karena dokumen menggunakan namespace, sampel menggunakan pernyataan WITH NAMESPACES. Opsi lain adalah menggunakan kata kunci namespace deklarasikan di XQuery Prolog untuk menentukan awalan.

  • Kueri kemudian membuat XML yang menyertakan <Product> elemen dan atribut ProductModelID-nya.

  • Klausa WHERE menggunakan metode exist() (jenis data XML) untuk memfilter baris. Metode exist() mengembalikan True jika ada <elemen ProductDescription> yang tidak memiliki <elemen turunan> Spesifikasi. Perhatikan penggunaan fungsi not().

Tataan hasil ini kosong, karena setiap deskripsi katalog model produk menyertakan <elemen Spesifikasi> .

B. Menggunakan fungsi not() XQuery untuk mengambil lokasi pusat kerja yang tidak memiliki atribut MachineHours

Kueri berikut ditentukan terhadap kolom Instruksi. Kolom ini menyimpan instruksi manufaktur untuk model produk.

Untuk model produk tertentu, kueri mengambil lokasi pusat kerja yang tidak menentukan MachineHours. Artinya, atribut MachineHours tidak ditentukan untuk <elemen Lokasi> .

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   

Dalam kueri sebelumnya, perhatikan hal berikut:

  • Declarenamespace di XQuery Prolog mendefinisikan awalan namespace instruksi manufaktur Adventure Works. Ini mewakili namespace yang sama yang digunakan dalam dokumen instruksi manufaktur.

  • Dalam kueri, predikat not(@MachineHours) mengembalikan True jika tidak ada atribut MachineHours .

Ini adalah hasilnya:

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

Batasan Implementasi

Ini adalah batasannya:

  • Fungsi not() hanya mendukung argumen jenis xs:boolean, atau node()*, atau urutan kosong.

Lihat Juga

Fungsi XQuery terhadap Tipe Data xml