Effektivt booleskt värde (XQuery)
gäller för:SQL Server
Det här är de effektiva booleska värdena:
Falskt om operand är en tom sekvens eller en boolesk false.
Annars är värdet sant.
Det effektiva booleska värdet kan beräknas för uttryck som returnerar ett enda booleskt värde, en nodsekvens eller en tom sekvens. Observera att det booleska värdet beräknas implicit när följande typer av uttryck bearbetas:
Logiska uttryck
WHERE-satsen för ett FLWOR-uttryck
Följande är ett exempel på ett effektivt booleskt värde. När om uttryck bearbetas bestäms villkorets effektiva booleska värde. Eftersom /a[1]
returnerar en tom sekvens är det effektiva booleska värdet falskt. Resultatet returneras som XML med en textnod (false).
value is false
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
I följande exempel är det effektiva booleska värdet sant, eftersom uttrycket returnerar en icke-bakåtstymtom sekvens.
DECLARE @x XML
SET @x = '<a/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
När du frågar xml- kolumner eller variabler kan du ha noder av boolesk typ. data() i det här fallet returnerar ett booleskt värde. Om frågeuttrycket returnerar ett booleskt sant värde är det effektiva booleska värdet sant, som du ser i nästa exempel. Följande illustreras också i exemplet:
En XML-schemasamling skapas. Elementet <b> i samlingen är av boolesk typ.
En skriven xml- variabel skapas och efterfrågas.
Uttrycket
data(/b[1])
returnerar ett booleskt sant värde. Därför är det effektiva booleska värdet i det här fallet sant.Uttrycket
data(/b[2])
returnerar ett booleskt falskt värde. Därför är det effektiva booleska värdet i det här fallet falskt.
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="s" type="string"/>
<element name="b" type="boolean"/>
</schema>'
go
DECLARE @x XML(SC)
SET @x = '<b>true</b><b>false</b>'
SELECT @x.query('if (data(/b[1])) then "true" else "false"')
SELECT @x.query('if (data(/b[2])) then "true" else "false"')
go