回答:
print @T & @F
戻り値 0
&
あるビットAND演算子。
&ビット単位演算子は、2つの式の間でビット単位の論理ANDを実行し、両方の式に対応する各ビットを取得します。入力式の両方のビット(解決されている現在のビット)の値が1である場合にのみ、結果のビットは1に設定されます。それ以外の場合、結果のビットは0に設定されます。
あなたの場合、に@T & @F
解決し1 & 0
、BIT
値を持つデータ型の結果を返します0
PRINT
演算子に渡されると、このbit
結果は暗黙的に文字列にキャストされ、結果がクライアントに出力されます。
print @T and @F
それにはかなり多くの間違いがあります。
2つのブール式を組み合わせ、両方の式がTRUEの場合にTRUEを返します
bit
ブール値と同じではありません。これらは互換性がなくbit
、必要なときにSQL Serverが暗黙的にbooleanデータ型にキャストすることはありません(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