print @T & @F
Повертається 0
&
- оператор Побітовий І.
Оператор & bit bit виконує бітовий логічний AND між двома виразами, беручи кожен відповідний біт для обох виразів. Біти в результаті встановлюються на 1, якщо і тільки якщо обидва біти (для поточного біта, який вирішується) у вхідних виразах мають значення 1; в іншому випадку біт в результаті встановлюється на 0.
У вашому випадку @T & @F
вирішує значення 1 & 0
і так повертає результат типу даних BIT
зі значенням0
При передачі PRINT
оператору цей bit
результат неявно передається на рядок, а результат виводиться клієнту.
print @T and @F
З цим досить багато не так.
AND
Поєднує два булеві вирази та повертає ІСТИНА, коли обидва вирази є ІСТИНИМИ
bit
не те саме, що булеве. Вони не є взаємозамінними, і SQL Server bit
при необхідності неявно передається булевому типу даних (SQL Server не реалізує тип даних SQL Boolean.).
Тому вам потрібно буде використовувати такий вираз
@T = 'TRUE' AND @F = 'TRUE'
замість
@T and @F
Навіть тоді ваші проблеми не закінчуються - все PRINT
одно не приймає булевого вираження. Ви можете використовувати вираз, CASE
як показано нижче.
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