Valor Booliano efetivo (XQuery)
Aplica-se a:SQL Server
Estes são os valores Boolianos efetivos:
False se o operando for uma sequência vazia ou um booliano false.
Caso contrário, o valor é true.
O valor Booliano efetivo pode ser calculado para expressões que retornem um único valor Booliano, uma sequência de nó ou uma sequência vazia. Observe que o valor Booliano é calculado implicitamente quando os seguintes tipos de expressões são processados:
Expressões lógicas
A cláusula WHERE de uma expressão FLWOR
A seguir é apresentado um exemplo de valor Booliano efetivo. Quando a expressão if é processada, o valor booliano efetivo da condição é determinado. Como /a[1]
retorna uma sequência vazia, o valor Booliano efetivo é false. O resultado é retornado como XML com um nó de texto (false).
value is false
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
No exemplo a seguir, o valor Booliano efetivo é true, pois a expressão retorna uma sequência não vazia.
DECLARE @x XML
SET @x = '<a/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
Ao consultar colunas ou variáveis xml tipada, você pode ter nós do tipo booliano. Os dados() nesse caso retornam um valor booliano. Se a expressão de consulta retorna um valor Booliano true, o valor Booliano efetivo é true, como exibido no exemplo a seguir. O exemplo também ilustra o seguinte:
Uma coleção de esquemas XML é criada. O elemento <b> na coleção é do tipo booliano.
Uma variável xml tipada é criada e consultada.
A expressão
data(/b[1])
retorna um valor Booliano true. Portanto, o valor Booliano efetivo nesse caso, é true.A expressão
data(/b[2])
retorna um valor falso booliano. Portanto, o valor Booliano efetivo nesse caso, é false.
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