Estou tentando entender a ordem de precedência das operações lógicas e tenho o seguinte código:
declare @T bit ='TRUE'
declare @F bit ='False'
print @T and @F
e retorna um erro como
Sintaxe incorreta perto da palavra-chave 'and'.
Substituí 'e' por '&' e o código funciona novamente. Por que o código anterior não funcionou? Estou usando o servidor SQL.
devoluções
0
&
é o operador AND bit a bit.No seu caso
@T & @F
resolve to1 & 0
e assim retorna um resultado de datatypeBIT
com valor0
Quando passado para o
PRINT
operador, essebit
resultado é convertido implicitamente em string e o resultado é enviado para o cliente.Tem muita coisa errada com isso.
AND
bit
não é o mesmo que booleano. Eles não são intercambiáveis e o SQL Server não será convertido implicitamentebit
em um tipo de dados booleano quando necessário (o SQL Server não implementa o tipo de dados booleano do SQL).Então você precisaria usar uma expressão como
ao invés de
Mesmo assim, seus problemas não acabaram -
PRINT
não aceita uma expressão booleana de qualquer maneira. Você poderia usar a expressãoCASE
como abaixo.