exist() Method (xml Data Type)
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Mengembalikan bit yang mewakili salah satu kondisi berikut:
1, mewakili True, jika ekspresi XQuery dalam kueri mengembalikan hasil yang tidak ada. Artinya, ia mengembalikan setidaknya satu simpul XML.
0, mewakili False, jika mengembalikan hasil kosong.
NULL jika instans jenis data xml tempat kueri dijalankan berisi NULL.
Sintaksis
exist (XQuery)
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi 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 ada. Jika Anda menentukan fungsi true() atau false() di dalam metode exist(), metode exist() akan mengembalikan 1, karena fungsi true() dan false() mengembalikan Boolean True dan False, masing-masing. Artinya, mereka mengembalikan hasil yang tidak ada sama sekali). 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 dititip) 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 dititik. Dalam membandingkan nilai ini, secara implisit dilemparkan 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 dititik
Contoh berikut mengilustrasikan penggunaan metode exist() terhadap variabel jenis xml . Ini adalah variabel XML yang diketik, karena menentukan nama kumpulan 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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk