Valeur booléenne effective (XQuery)

Voici les valeurs booléennes effectives :

  • False si l'opérande est une séquence vide ou une valeur booléenne fausse.

  • Sinon, la valeur est true.

La valeur booléenne effective peut être calculée pour les expressions qui renvoient une seule valeur booléenne, une séquence de nœuds ou une séquence vide. Notez que la valeur booléenne est calculée de manière implicite lors du traitement des types d'expressions suivants :

Voici un exemple de valeur booléenne effective. Lors du traitement de l'expression if, la valeur booléenne effective de la condition est déterminée. Puisque l'expression /a[1] renvoie une séquence vide, la valeur booléenne effective est false. Le résultat est renvoyé au format XML avec un nœud de texte (false).

value is false
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go

Dans l'exemple suivant, la valeur booléenne effective est true puisque l'expression renvoie une séquence non vide.

DECLARE @x XML
SET @x = '<a/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go

Lors d'une requête réalisée sur des colonnes ou des variables de type xml, vous pouvez avoir des nœuds de type booléen. La fonction data(), dans ce cas, renvoie une valeur booléenne. Si l'expression de la requête renvoie une valeur booléenne true, la valeur booléenne effective est true, comme le montre l'exemple qui suit. Les points suivants sont également illustrés dans l'exemple suivant :

  • Une collection de schémas XML est créée L'élément <b> de la collection est de type booléen.

  • Une variable de type xml est créée et interrogée.

  • L'expression data(/b[1]) renvoie une valeur booléenne true. Par conséquent, la valeur booléenne effective est true dans ce cas.

  • L'expression data(/b[2]) renvoie une valeur booléenne false. Par conséquent, la valeur booléenne effective est false dans ce cas.

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