print @T & @F
Kembali 0
&
adalah operator Bitwise AND .
Operator & bitwise melakukan logika bitwise AND antara dua ekspresi, masing-masing mengambil bit yang sesuai untuk kedua ekspresi. Bit dalam hasil diatur ke 1 jika dan hanya jika kedua bit (untuk bit saat ini sedang diselesaikan) dalam ekspresi input memiliki nilai 1; jika tidak, bit dalam hasil diatur ke 0.
Dalam kasus Anda @T & @F
memutuskan untuk1 & 0
dan mengembalikan hasil tipe data BIT
dengan nilai0
Ketika diteruskan ke PRINT
operator, bit
hasil ini secara implisit dilemparkan ke string dan hasilnya dihasilkan ke klien.
print @T and @F
Cukup banyak yang salah dengan itu.
AND
Menggabungkan dua ekspresi Boolean dan mengembalikan TRUE ketika kedua ekspresi TRUE
bit
tidak sama dengan boolean. Mereka tidak dapat dipertukarkan dan SQL Server tidak akan secara implisit dilemparkanbit
ke tipe data boolean bila diperlukan (SQL Server tidak mengimplementasikan tipe data SQL Boolean.).
Jadi, Anda perlu menggunakan ekspresi seperti
@T = 'TRUE' AND @F = 'TRUE'
dari pada
@T and @F
Meski begitu masalah Anda belum selesai - PRINT
toh tidak menerima ekspresi boolean. Anda dapat menggunakan ekspresi CASE
seperti di bawah ini.
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