print @T & @F
Retour 0
&
est l' opérateur ET au niveau du bit .
L'opérateur & au niveau du bit effectue un ET logique au niveau du bit entre les deux expressions, en prenant chaque bit correspondant pour les deux expressions. Les bits du résultat sont mis à 1 si et seulement si les deux bits (pour le bit en cours de résolution) dans les expressions d'entrée ont une valeur de 1; sinon, le bit du résultat est mis à 0.
Dans votre cas, @T & @F
résout 1 & 0
et renvoie donc un résultat de type de données BIT
avec une valeur0
Lorsqu'il est transmis à l' PRINT
opérateur, ce bit
résultat est implicitement converti en chaîne et le résultat est envoyé au client.
print @T and @F
A pas mal de mal avec ça.
AND
Combine deux expressions booléennes et renvoie VRAI lorsque les deux expressions sont VRAIES
bit
n'est pas le même que booléen. Ils ne sont pas interchangeables et SQL Server ne sera pas implicitement converti bit
en un type de données booléen en cas de besoin (SQL Server n'implémente pas le type de données booléen SQL.).
Vous devez donc utiliser une expression comme
@T = 'TRUE' AND @F = 'TRUE'
au lieu de
@T and @F
Même alors, vos problèmes ne sont pas terminés - PRINT
n'accepte pas une expression booléenne de toute façon. Vous pouvez utiliser l'expression CASE
ci-dessous.
PRINT CASE
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic
END