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 |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
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, "€".
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 > 50000 and < 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.