Quelqu'un peut-il me expliquer les résultats de cette requête:opérations de comparaison sur xs: boolean dans SQL Server 2005
declare @xml xml;
set @xml = '<node attribute="true">Val</node>';
select
T.c.query('xs:boolean(@attribute[1])') Value,
T.c.query('xs:boolean(@attribute[1]) = false') ValueEqualsFalse,
T.c.query('xs:boolean(@attribute[1]) = true') ValueEqualsTrue,
T.c.query('xs:boolean(@attribute[1]) != false') ValueNotEqualsFalse,
T.c.query('xs:boolean(@attribute[1]) != true') ValueNotEqualsTrue
from @Xml.nodes('node') T(c);
La première colonne, la valeur, retourne vrai. Les autres retournent tous faux. Donc, ayant réussi à mettre la valeur au bon type, comment puis-je vérifier sa valeur?
La séquence vide n'est pas convertie en 'false' dans le dernier cas. Au lieu de cela, vous comparez une valeur booléenne avec une séquence vide. Les opérateurs '=' et '! =' Sont des comparaisons de séquences, et retournent vrai s'il y a une paire d'éléments dans les séquences d'entrée qui satisfont la comparaison. Comme il n'y a aucun élément dans la séquence vide qui satisfasse la comparaison, le résultat de tous ces cas est false(). –
Merci Oliver! Mon erreur. J'ai édité le post. –
Merci Dennis et Oliver! –