Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
XQuery mendukung pernyataan if-then-else bersyarkat berikut:
if (<expression1>)
then
<expression2>
else
<expression3>
Tergantung pada nilai Boolean yang efektif dari expression1, baik expression2 atau expression3 dievaluasi. Contohnya:
Jika ekspresi pengujian,
expression1, menghasilkan urutan kosong, hasilnya adalah False.Jika ekspresi pengujian,
expression1, menghasilkan nilai Boolean sederhana, nilai ini adalah hasil ekspresi.Jika ekspresi pengujian,
expression1, menghasilkan urutan satu atau beberapa simpul, hasil ekspresinya adalah True.Jika tidak, kesalahan statis dimunculkan.
Perhatikan hal-hal berikut:
Ekspresi pengujian harus diapit di antara tanda kurung.
Ekspresi lain diperlukan. Jika Anda tidak membutuhkannya, Anda dapat mengembalikan " ( ) ", seperti yang diilustrasikan dalam contoh dalam topik ini.
Misalnya, kueri berikut ditentukan terhadap variabel jenis xml . Kondisi if menguji nilai variabel SQL (@v) di dalam ekspresi XQuery dengan menggunakan fungsi ekstensi fungsi sql:variable(). Jika nilai variabel adalah "FirstName", nilai tersebut <FirstName> mengembalikan elemen . Jika tidak, ia mengembalikan <LastName> elemen .
declare @x xml
declare @v varchar(20)
set @v='FirstName'
set @x='
<ROOT rootID="2">
<FirstName>fname</FirstName>
<LastName>lname</LastName>
</ROOT>'
SELECT @x.query('
if ( sql:variable("@v")="FirstName" ) then
/ROOT/FirstName
else
/ROOT/LastName
')
Ini adalah hasilnya:
<FirstName>fname</FirstName>
Kueri berikut mengambil dua deskripsi fitur pertama dari deskripsi katalog produk dari model produk tertentu. Jika ada lebih banyak fitur dalam dokumen, ia menambahkan <there-is-more> elemen dengan konten kosong.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product>
{ /p1:ProductDescription/@ProductModelID }
{ /p1:ProductDescription/@ProductModelName }
{
for $f in /p1:ProductDescription/p1:Features/*[position()\<=2]
return
$f
}
{
if (count(/p1:ProductDescription/p1:Features/*) > 2)
then \<there-is-more/>
else ()
}
</Product>
') as x
FROM Production.ProductModel
WHERE ProductModelID = 19
Dalam kueri sebelumnya, kondisi dalam ekspresi if memeriksa apakah ada lebih dari dua elemen turunan di <Features.> Jika ya, elemen akan \<there-is-more/> mengembalikan elemen dalam hasilnya.
Ini adalah hasilnya:
<Product ProductModelID="19" ProductModelName="Mountain 100">
\<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
\<p1:WarrantyPeriod>3 years\</p1:WarrantyPeriod>
\<p1:Description>parts and labor\</p1:Description>
\</p1:Warranty>
\<p2:Maintenance xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
\<p2:NoOfYears>10 years\</p2:NoOfYears>
\<p2:Description>maintenance contract available through your dealer or any AdventureWorks retail store.\</p2:Description>
\</p2:Maintenance>
\<there-is-more />
</Product>
Dalam kueri berikut, <Location> elemen dengan atribut LocationID dikembalikan jika lokasi pusat kerja tidak menentukan jam penyiapan.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $WC in //AWMI:root/AWMI:Location
return
if ( $WC[not(@SetupHours)] )
then
<WorkCenterLocation>
{ $WC/@LocationID }
</WorkCenterLocation>
else
()
') as Result
FROM Production.ProductModel
where ProductModelID=7
Ini adalah hasilnya:
<WorkCenterLocation LocationID="30" />
<WorkCenterLocation LocationID="45" />
<WorkCenterLocation LocationID="60" />
Kueri ini dapat ditulis tanpa klausa if , seperti yang diperlihatkan dalam contoh berikut:
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $WC in //AWMI:root/AWMI:Location[not(@SetupHours)]
return
<Location>
{ $WC/@LocationID }
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7