Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
XQuery suporta a seguinte instrução condicional if-then-else:
if (<expression1>)
then
<expression2>
else
<expression3>
Dependendo do valor booleano efetivo de expression1, expression2 ou expression3 é avaliado. Por exemplo:
Se a expressão de teste,
expression1, resultar em uma sequência vazia, o resultado será False.Se a expressão de teste,
expression1, resultar em um valor booleano simples, esse valor será o resultado da expressão.Se a expressão de teste,
expression1, resultar em uma sequência de um ou mais nós, o resultado da expressão será True.Caso contrário, um erro estático é gerado.
Observe também o seguinte:
A expressão de teste deve ser colocada entre parênteses.
A mais expressão é necessária. Se você não precisar dele, você pode retornar " ( ) ", como ilustrado nos exemplos neste tópico.
Por exemplo, a consulta a seguir é especificada em relação à variável xml type. O se condição testa o valor da variável SQL (@v) dentro da expressão XQuery usando a função sql:variable() função de extensão. Se o valor da variável for "FirstName", ele retornará o elemento <FirstName>. Caso contrário, ele retorna o elemento <LastName>.
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
')
Este é o resultado:
<FirstName>fname</FirstName>
A consulta a seguir recupera as duas primeiras descrições de recursos da descrição do catálogo de produtos de um modelo de produto específico. Se houver mais recursos no documento, ele adicionará um elemento <there-is-more> com conteúdo vazio.
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
Na consulta anterior, a condição no se expressão verifica se há mais de dois elementos filho no <Features>. Se sim, ele retorna o elemento \<there-is-more/> no resultado.
Este é o resultado:
<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>
Na consulta a seguir, um elemento <Location> com um atributo LocationID será retornado se o local do centro de trabalho não especificar as horas de instalação.
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
Este é o resultado:
<WorkCenterLocation LocationID="30" />
<WorkCenterLocation LocationID="45" />
<WorkCenterLocation LocationID="60" />
Essa consulta pode ser escrita sem a se cláusula, conforme mostrado no exemplo a seguir:
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