Bagikan melalui


Ekspresi Terkuantifikasi (XQuery)

Berlaku untuk:SQL Server

Kuantifier eksistensial dan universal menentukan semantik yang berbeda untuk operator Boolean yang diterapkan ke dua urutan. Ini diperlihatkan dalam tabel berikut.

Kuantifier existential
Mengingat dua urutan, jika ada item dalam urutan pertama yang memiliki kecocokan dalam urutan kedua, berdasarkan operator perbandingan yang digunakan, nilai yang dikembalikan adalah True.

Kuantifier universal
Mengingat dua urutan, jika setiap item dalam urutan pertama memiliki kecocokan dalam urutan kedua, nilai yang dikembalikan adalah True.

XQuery mendukung ekspresi terukur dalam formulir berikut:

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

Anda dapat menggunakan ekspresi ini dalam kueri untuk menerapkan kuantifikasi eksistensial atau universal secara eksplisit ke ekspresi atas satu atau beberapa urutan. Di SQL Server, ekspresi dalam satisfies klausul harus menghasilkan salah satu hal berikut: urutan simpul, urutan kosong, atau nilai Boolean. Nilai Boolean yang efektif dari hasil ekspresi tersebut akan digunakan dalam kuantifikasi. Kuantifikasi eksistensial yang menggunakan beberapa akan mengembalikan True jika setidaknya salah satu nilai yang terikat oleh kuantifier memiliki hasil True dalam ekspresi yang memuaskan. Kuantifikasi universal yang menggunakan setiap harus memiliki True untuk semua nilai yang terikat oleh kuantifier.

Misalnya, kueri berikut memeriksa setiap <elemen Lokasi> untuk melihat apakah memiliki atribut LocationID.

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  

Karena LocationID adalah atribut yang diperlukan dari <elemen Lokasi> , Anda menerima hasil yang diharapkan:

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

Alih-alih menggunakan metode query(), Anda bisa menggunakan metode value() untuk mengembalikan hasilnya ke dunia relasional, seperti yang diperlihatkan dalam kueri berikut. Kueri mengembalikan True jika semua lokasi pusat kerja memiliki atribut LocationID. Jika tidak, kueri mengembalikan False.

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  

Kueri berikut memeriksa untuk melihat apakah salah satu gambar produk kecil. Dalam XML katalog produk, berbagai sudut disimpan untuk setiap gambar produk dengan ukuran yang berbeda. Anda mungkin ingin memastikan bahwa setiap XML katalog produk menyertakan setidaknya satu gambar berukuran kecil. Kueri berikut menyelesaikan ini:

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  

Ini adalah hasil parsial:

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

Batasan Implementasi

Ini adalah batasannya:

  • Pernyataan jenis tidak didukung sebagai bagian dari pengikatan variabel dalam ekspresi terkuantifikasi.

Lihat Juga

Ekspresi XQuery