Bagikan melalui


Ekspresi Utama (XQuery)

Berlaku untuk:SQL Server

Ekspresi utama XQuery mencakup literal, referensi variabel, ekspresi item konteks, konstruktor, dan panggilan fungsi.

Harfiah

Literal XQuery dapat berupa literal numerik atau string. String literal dapat menyertakan referensi entitas yang telah ditentukan sebelumnya, dan referensi entitas adalah urutan karakter. Urutan dimulai dengan ampersand yang mewakili satu karakter yang jika tidak mungkin memiliki signifikansi sindikat. Berikut ini adalah referensi entitas yang telah ditentukan sebelumnya untuk XQuery.

Referensi entitas Merepresentasikan
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

String literal juga dapat berisi referensi karakter, referensi gaya XML ke karakter Unicode, yang diidentifikasi oleh titik kode desimal atau heksadesimalnya. Misalnya, simbol Euro dapat diwakili oleh referensi karakter, "&#8364;".

Catatan

SQL Server menggunakan XML versi 1.0 sebagai dasar untuk penguraian.

Contoh

Contoh berikut mengilustrasikan penggunaan literal dan juga referensi entitas dan karakter.

Kode ini mengembalikan kesalahan, karena <' karakter dan '> memiliki arti khusus.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')  
GO  

Jika Anda menggunakan referensi entitas sebagai gantinya, kueri berfungsi.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary &gt; 50000 and &lt; 100000</SalaryRange>')  
GO  

Contoh berikut mengilustrasikan penggunaan referensi karakter untuk mewakili simbol Euro.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <a>€12.50</a>')  

Ini adalah hasilnya.

<a>€12.50</a>

Dalam contoh berikut, kueri dibatasi oleh apostrof. Oleh karena itu, apostrof dalam nilai string diwakili oleh dua apostrof yang berdekatan.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>I don''t know</a>')  
Go  

Ini adalah hasilnya.

<a>I don't know</a>

Fungsi Boolean bawaan, true() dan false(), dapat digunakan untuk mewakili nilai Boolean, seperti yang ditunjukkan dalam contoh berikut.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>{true()}</a>')  
GO  

Konstruktor elemen langsung menentukan ekspresi dalam kurung kurawal. Ini digantikan oleh nilainya dalam XML yang dihasilkan.

Ini adalah hasilnya.

<a>true</a>

Referensi Variabel

Referensi variabel di XQuery adalah QName yang didahului oleh tanda $. Implementasi ini hanya mendukung referensi variabel yang belum diprefiks. Misalnya, kueri berikut menentukan variabel $i dalam ekspresi FLWOR.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
 for $i in /root return data($i)')  
GO  

Kueri berikut tidak akan berfungsi karena awalan namespace ditambahkan ke nama variabel.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
DECLARE namespace x="https://X";  
for $x:i in /root return data($x:i)')  
GO  

Anda dapat menggunakan fungsi ekstensi sql:variable() untuk merujuk ke variabel SQL, seperti yang diperlihatkan dalam kueri berikut.

DECLARE @price money  
SET @price=2500  
DECLARE @x xml  
SET @x = ''  
SELECT @x.query('<value>{sql:variable("@price") }</value>')  

Ini adalah hasilnya.

<value>2500</value>

Batasan Implementasi

Ini adalah batasan implementasi:

  • Variabel dengan awalan namespace tidak didukung.

  • Impor modul tidak didukung.

  • Deklarasi variabel eksternal tidak didukung. Solusi untuk ini adalah menggunakan fungsi sql:variable().

Ekspresi Item Konteks

Item konteks adalah item yang saat ini sedang diproses dalam konteks ekspresi jalur. Ini diinisialisasi dalam instans jenis data XML not-NULL dengan simpul dokumen. Ini juga dapat diubah dengan metode node(), dalam konteks ekspresi XPath atau predikat [].

Item konteks dikembalikan oleh ekspresi yang berisi titik (.). Misalnya, kueri berikut mengevaluasi setiap elemen <a> untuk keberadaan atribut .attr Jika atribut ada, elemen dikembalikan. Perhatikan bahwa kondisi dalam predikat menentukan bahwa simpul konteks ditentukan oleh satu periode.

DECLARE @var XML  
SET @var = '<ROOT>  
<a>1</a>  
<a attr="1">2</a>  
</ROOT>'  
SELECT @var.query('/ROOT[1]/a[./@attr]')  

Ini adalah hasilnya.

<a attr="1">2</a>

Panggilan Fungsi

Anda dapat memanggil fungsi XQuery bawaan dan fungsi SQL Server sql:variable() dan sql:column(). Untuk daftar fungsi yang diimplementasikan, lihat Fungsi XQuery terhadap Tipe Data xml.

Batasan Implementasi

Ini adalah batasan implementasi:

  • Deklarasi fungsi dalam prolog XQuery tidak didukung.

  • Impor fungsi tidak didukung.

Lihat Juga

Konstruksi XML (XQuery)