Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Az XQuery a következő feltételes if-then-else utasítást támogatja:
if (<expression1>)
then
<expression2>
else
<expression3>
A expression1érvényes logikai értékétől függően a expression2 vagy expression3 kiértékelése történik. Például:
Ha a tesztkifejezés (
expression1) üres sorozatot eredményez, az eredmény Hamis.Ha a tesztkifejezés
expression1egy egyszerű logikai értéket eredményez, akkor ez az érték a kifejezés eredménye.Ha a tesztkifejezés
expression1egy vagy több csomópont sorozatát eredményezi, a kifejezés eredménye Igaz.Ellenkező esetben statikus hiba merül fel.
Vegye figyelembe a következőket is:
A tesztkifejezést zárójelek közé kell tenni.
A más kifejezésre van szükség. Ha nincs rá szüksége, a jelen témakör példáiban látható módon visszaadhatja a " ( ) " értéket.
A következő lekérdezés például az xml típusváltozóval van megadva. Az , ha feltétel az SQL-változó (@v) értékét teszteli az XQuery-kifejezésben az sql:variable() függvény bővítményfüggvény használatával. Ha a változó értéke "FirstName", akkor a <FirstName> elemet adja vissza. Ellenkező esetben a <LastName> elemet adja vissza.
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
')
Ez az eredmény:
<FirstName>fname</FirstName>
Az alábbi lekérdezés lekéri az első két funkcióleírást egy adott termékmodell termékkatalógus-leírásából. Ha a dokumentum több funkciót is tartalmaz, egy üres tartalommal rendelkező <there-is-more> elemet ad hozzá.
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
Az előző lekérdezésben a feltétel, ha kifejezés ellenőrzi, hogy a <Features>kétnál több gyermekelem található-e. Ha igen, az eredmény \<there-is-more/> elemét adja vissza.
Ez az eredmény:
<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>
A következő lekérdezésben egy LocationID attribútummal rendelkező <Location> elemet ad vissza a rendszer, ha a műhely helye nem adja meg a beállítási órákat.
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
Ez az eredmény:
<WorkCenterLocation LocationID="30" />
<WorkCenterLocation LocationID="45" />
<WorkCenterLocation LocationID="60" />
Ez a lekérdezés a nélkül is megírható, ha záradék, ahogy az alábbi példában látható:
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