print @T & @F
Zwroty 0
&
jest operatorem bitowym AND .
Operator bitowy wykonuje logikę bitową AND między dwoma wyrażeniami, przyjmując każdy odpowiedni bit dla obu wyrażeń. Bity w wyniku są ustawione na 1 wtedy i tylko wtedy, gdy oba bity (dla rozstrzyganego bieżącego bitu) w wyrażeniach wejściowych mają wartość 1; w przeciwnym razie bit w wyniku jest ustawiony na 0.
W twoim przypadku @T & @F
rozwiązuje 1 & 0
i zwraca wynik typu danych BIT
o wartości0
Po przekazaniu do PRINT
operatora bit
wynik ten jest domyślnie rzutowany na ciąg znaków, a wynik przekazywany do klienta.
print @T and @F
Ma z tym całkiem sporo do czynienia.
AND
Łączy dwa wyrażenia logiczne i zwraca PRAWDA, gdy oba wyrażenia są PRAWDA
bit
to nie to samo, co boolean. Nie można ich zamieniać, a SQL Server nie będzie pośrednio przesyłany bit
do typu danych boolowskich, gdy zajdzie taka potrzeba (SQL Server nie implementuje typu danych boolowskich SQL.).
Więc musisz użyć wyrażenia podobnego do
@T = 'TRUE' AND @F = 'TRUE'
zamiast
@T and @F
Nawet wtedy twoje problemy się nie skończyły - i PRINT
tak nie akceptuje wyrażenia boolowskiego. Możesz użyć wyrażenia CASE
jak poniżej.
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