exist() Method (xml Data Type)
Berlaku untuk:Database
SQL Server Azure SQL Azure SQL Managed Instance
Mengembalikan sedikit yang mewakili salah satu kondisi berikut:
1, mewakili True, jika ekspresi XQuery dalam kueri mengembalikan hasil yang tidak kosong. Artinya, ia mengembalikan setidaknya satu simpul XML.
0, mewakili False, jika mengembalikan hasil kosong.
NULL jika instans jenis data xml yang kuerinya dijalankan berisi NULL.
Sintaks
exist (XQuery)
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
XQuery
Adalah ekspresi XQuery, string harfiah.
Keterangan
Catatan
Metode exist() mengembalikan 1 untuk ekspresi XQuery yang mengembalikan hasil yang tidak kosong. Jika Anda menentukan fungsi true() atau false() di dalam metode exist(), metode exist() akan mengembalikan 1, karena fungsi true() dan false() masing-masing mengembalikan Boolean True dan False. Artinya, mereka mengembalikan hasil yang tidak kosong). Oleh karena itu, exist() akan mengembalikan 1 (True), seperti yang ditunjukkan dalam contoh berikut:
DECLARE @x XML;
SET @x='';
SELECT @x.exist('true()');
Contoh
Contoh berikut menunjukkan cara menentukan metode exist().
Contoh: Menentukan metode exist() terhadap variabel jenis xml
Dalam contoh berikut, @x adalah variabel jenis xml (xml yang tidak dijenis) dan @f merupakan variabel jenis bilangan bulat yang menyimpan nilai yang dikembalikan oleh metode exist(). Metode exist() mengembalikan True (1) jika nilai tanggal yang disimpan dalam instans XML adalah 2002-01-01
.
DECLARE @x XML;
DECLARE @f BIT;
SET @x = '<root Somedate = "2002-01-01Z"/>';
SET @f = @x.exist('/root[(@Somedate cast as xs:date?) eq xs:date("2002-01-01Z")]');
SELECT @f;
Dalam membandingkan tanggal dalam metode exist(), perhatikan hal berikut:
Kode
cast as xs:date?
digunakan untuk melemparkan nilai ke jenis xs:date untuk tujuan perbandingan.Nilai atribut @Somedate tidak ditipe. Dalam membandingkan nilai ini, secara implisit ditransmisikan ke jenis di sisi kanan perbandingan, jenis xs:date .
Alih-alih mentransmisikan sebagai xs:date(), Anda dapat menggunakan fungsi konstruktor xs:date(). Untuk informasi selengkapnya, lihat Fungsi Konstruktor (XQuery).
Contoh berikut mirip dengan yang sebelumnya, kecuali memiliki <Somedate
> elemen .
DECLARE @x XML;
DECLARE @f BIT;
SET @x = '<Somedate>2002-01-01Z</Somedate>';
SET @f = @x.exist('/Somedate[(text()[1] cast as xs:date ?) = xs:date("2002-01-01Z") ]')
SELECT @f;
Perhatikan hal berikut ini dari kueri sebelumnya:
- Metode text() mengembalikan simpul teks yang berisi nilai
2002-01-01
yang tidak diketik . (Jenis XQuery adalah xdt:untypedAtomic.) Anda harus secara eksplisit mentransmisikan nilai yang diketik ini dari x ke xsd:date, karena transmisi implisit tidak didukung dalam kasus ini.
Contoh: Menentukan metode exist() terhadap variabel xml yang ditik
Contoh berikut mengilustrasikan penggunaan metode exist() terhadap variabel jenis xml . Ini adalah variabel XML yang diketik, karena menentukan nama koleksi namespace layanan skema, ManuInstructionsSchemaCollection
.
Dalam contoh, dokumen instruksi manufaktur pertama kali ditetapkan ke variabel ini dan kemudian metode exist() digunakan untuk menemukan apakah dokumen menyertakan <Location
> elemen yang nilai atribut LocationID-nya adalah 50.
Metode exist() yang ditentukan terhadap @x variabel mengembalikan 1 (True) jika dokumen instruksi manufaktur menyertakan><Location
elemen yang memiliki .LocationID=50
Jika tidak, metode mengembalikan 0 (False).
DECLARE @x XML (Production.ManuInstructionsSchemaCollection);
SELECT @x=Instructions
FROM Production.ProductModel
WHERE ProductModelID=67;
--SELECT @x
DECLARE @f INT;
SET @f = @x.exist(' declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[@LocationID=50]
');
SELECT @f;
Contoh: Menentukan metode exist() terhadap kolom jenis xml
Kueri berikut mengambil ID model produk yang deskripsi katalognya tidak menyertakan spesifikasi, <Specifications
> elemen:
SELECT ProductModelID, CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductModelID= "{ sql:column("ProductModelID") }"
/>
') AS Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/pd:ProductDescription[not(pd:Specifications)]'
) = 1;
Perhatikan hal berikut ini dari kueri sebelumnya:
Klausa WHERE hanya memilih baris tersebut dari tabel ProductDescription yang memenuhi kondisi yang ditentukan terhadap kolom jenis xml CatalogDescription .
Metode exist() dalam klausa WHERE mengembalikan 1 (True) jika XML tidak menyertakan elemen apa pun <
Specifications
> . Perhatikan penggunaan fungsi not() (XQuery).Fungsi sql:column() (XQuery) digunakan untuk membawa nilai dari kolom non-XML.
Kueri ini mengembalikan set baris kosong.
Kueri menentukan metode query() dan exist() dari tipe data xml dan kedua metode ini mendeklarasikan namespace yang sama dalam prolog kueri. Dalam hal ini, Anda mungkin ingin menggunakan WITH XMLNAMESPACES untuk mendeklarasikan awalan dan menggunakannya dalam kueri.
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)]'
) = 1;
Lihat juga
Menambahkan Namespace ke Kueri dengan XMLNAMESPACES
Membandingkan XML Yang Dititik dengan XML yang Tidak Dititik
Membuat Instans Data XML
Metode Tipe Data xml
Bahasa Modifikasi Data XML (XML DML)