print @T & @F
Devoluciones 0
&es el operador Y bit a bit .
El operador & bitwise realiza un AND lógico bit a bit entre las dos expresiones, tomando cada bit correspondiente para ambas expresiones. Los bits en el resultado se establecen en 1 si y solo si ambos bits (para el bit actual que se está resolviendo) en las expresiones de entrada tienen un valor de 1; de lo contrario, el bit en el resultado se establece en 0.
En su caso, @T & @Fresuelve ay 1 & 0devuelve un resultado de tipo de datos BITcon valor0
Cuando se pasa al PRINToperador, este bitresultado se convierte implícitamente en cadena y el resultado se envía al cliente.
print @T and @F
Tiene bastante mal con eso.
AND
Combina dos expresiones booleanas y devuelve VERDADERO cuando ambas expresiones son VERDADERAS
bitNo es lo mismo que booleano. No son intercambiables y SQL Server no se convertirá implícitamente biten un tipo de datos booleano cuando sea necesario (SQL Server no implementa el tipo de datos booleano SQL).
Entonces necesitarías usar una expresión como
@T = 'TRUE' AND @F = 'TRUE'
en lugar de
@T and @F
Incluso entonces sus problemas no han terminado, de PRINTtodos modos no acepta una expresión booleana. Puede usar la expresión de la CASEsiguiente manera.
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