Friday, 15 April 2011

sql server - SQL query error CASE statement in WHERE clause -


मुझे एक WHOSE शर्त को CASE अभिव्यक्ति मैंने नीचे की कोशिश की, लेकिन मुझे तीसरे पंक्ति पर = संकेत पर एक त्रुटि मिलती है कृपया, क्या कोई मुझे एक ऐसी परिस्थिति के उदाहरणों को सही / इंगित कर सकता है?

  WHERE जब @ Param1 IS null THEN ((@ Param1 = '(सभी)) या (@ परम 1 = '(तैयार)' और टी। कॉलम 1 नहीं ('डिस्स्कोप', 'डोन')) या (@ परम 1 = '(लंबित)' और 'टी। कॉलम 1 नहीं' ('डिसकोडेड', 'डोन') और टी। कॉलम 2 IN ('डीफ़ेर्ड', 'रिजेक्ट', 'रेडी फॉर टेस्ट')) या (@ परम 1 = टी। कॉलम 1) ELSE (टी। कॉलम 1 = 'डब्ल्यूआईपी' या टी। कॉलम 1 = 'शुरू नहीं किया गया') END  

क्वेरी केवल प्रतिनिधित्व के लिए है। मैं एमएस एसक्यूएल 2008 आर 2 का उपयोग कर रहा हूं।

<पी > आप ज्यादातर एसक्यूएल बोलियों (एसक्यूएल सर्वर सहित) में मामले के अंदर स्थितियों को नहीं रख सकते हैं। सामान्य तौर पर, यदि आप केस का उपयोग में कर रहे हैं < / कोड> खंड सभी पर, आप एक खराब समाधान का पीछा कर रहे हैं। ऐसा करने का सही तरीका बूलियन तर्क का उपयोग करके पूरी चीज़ को फिर से लिखना है:
  WHERE (@ परम 1 शून्य और ( @ परम 1 इन ('(सभी)', टी सी 0 स्तंभ 1) या (@ परम 1 = '(तैयार)' और 'टीकोल 1' में ('डिस्क्ड', 'डोन')) या (@ परम 1 = '(लंबित)' और 'टीकॉल 1 एन' ('डिस्क्ड', 'डोन') और t.column2 IN ('deferred', 'rejected', 'test for test'))) या (@ परम 1 नल और टीकॉल 1 इन ('डब्ल्यूआईपी', 'शुरू नहीं'))  < / पूर्व> 

उस बात के लिए, जाँच कर रही है कि अगर @ परम 1 शून्य नहीं है तो यह बिल्कुल व्यर्थ है। चूंकि null = anything हमेशा झूठी है, क्वेरी की पहली छमाही में सभी स्थितियों में @ Param1 शून्य है। इसे पूरा करना चाहिए जो आप अधिक सीधे-आगे के तरीके में करने का प्रयास कर रहे हैं:

  WHERE @ Param1 IN ('(All)', t.column1) या (@ परम 1 = '(तैयार) 'और' 1 '(' डिस्क्ड ',' डोन ') और टीकॉल 2 इन (' डीफ़र्ड ') (' डिस्स्कोप ',' डोन ')) या (@ परम 1 =' (लंबित) 'और' ',' अस्वीकृत ',' रेडी फॉर टेस्ट ')) या (@ परम 1 नल और टीकॉल 1 इन (' डब्ल्यूआईपी ',' आरंभ नहीं '))  

No comments:

Post a Comment