print @T & @F
ผลตอบแทน 0
&
เป็นผู้ประกอบการบิตและ
ตัวดำเนินการ & bitwise ดำเนินการตรรกะระดับบิตและ AND ระหว่างนิพจน์ทั้งสองโดยรับบิตที่สอดคล้องกันสำหรับนิพจน์ทั้งสอง บิตในผลลัพธ์ถูกตั้งค่าเป็น 1 ถ้าหากทั้งสองบิต (สำหรับบิตปัจจุบันกำลังแก้ไข) ในนิพจน์อินพุตมีค่า 1; มิฉะนั้นบิตของผลลัพธ์จะถูกตั้งค่าเป็น 0
ในกรณีของคุณ@T & @F
จะแก้ไข1 & 0
และส่งกลับผลลัพธ์ของประเภทข้อมูลที่BIT
มีค่า0
เมื่อส่งไปยังPRINT
โอเปอเรเตอร์bit
ผลลัพธ์นี้จะถูกส่งไปยังสตริงและผลลัพธ์ผลลัพธ์ไปยังไคลเอ็นต์โดยปริยาย
print @T and @F
มีความผิดค่อนข้างมากเลยทีเดียว
AND
รวมสองบูลีนนิพจน์และคืนค่า TRUE เมื่อทั้งสองนิพจน์เป็น TRUE
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