print @T & @F
रिटर्न 0
&है बिटवाइस और ऑपरेटर।
& बिटवाइज़ ऑपरेटर एक बिटवाइज़ लॉजिकल और दोनों एक्सप्रेशन के बीच, प्रत्येक एक्सप्रेशन को दोनों एक्सप्रेशंस के लिए करता है। परिणाम में बिट्स 1 पर सेट होते हैं यदि और केवल तभी दोनों बिट्स (वर्तमान बिट के लिए हल किए जा रहे हैं) में इनपुट का मान 1 है; अन्यथा, परिणाम में बिट 0 पर सेट है।
आपके मामले में मूल्य के साथ डेटाटाइप का परिणाम होता है और इसलिए इसका @T & @Fसमाधान होता है1 & 0BIT0
जब PRINTऑपरेटर को पास किया जाता है तो यह bitपरिणाम अनुमानित रूप से स्ट्रिंग और ग्राहक को परिणाम आउटपुट के लिए डाल दिया जाता है।
print @T and @F
इसके साथ काफी गलत है।
AND
दो बूलियन अभिव्यक्तियों को मिलाता है और दोनों अभिव्यक्तियों के सही होने पर TRUE लौटाता है
bitबूलियन के समान नहीं है। वे विनिमेय नहीं होते हैं और bitजब जरूरत होती है (SQL सर्वर SQL बूलियन डेटाटाइप लागू नहीं करता है) तो SQL सर्वर अंतर्निहित रूप से बूलियन डेटाटाइप को नहीं डालेगा।)
तो आप की तरह एक अभिव्यक्ति का उपयोग करने की आवश्यकता होगी
@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