2010-03-22 19 views
10

कैसे एक मूल्य IS NULL [or] = @param (जहां @param रिक्त है)बनाम जहां खंड + एसक्यूएल सर्वर

पूर्व जांच करने के लिए = शून्य शून्य है:

Select column1 from Table1 
where column2 IS NULL => works fine 

अगर मैं की तुलना मूल्य बदलना चाहते हैं (शून्य है) @param के साथ। यह कैसे किया जा सकता है

Select column1 from Table1 
where column2 = @param => this works fine until @param got some value in it and if is null never finds a record. 

यह कैसे प्राप्त हो सकता है?

उत्तर

31
select column1 from Table1 
    where (@param is null and column2 is null) 
    or (column2 = @param) 
2

इसके लिए कोई भी "एक आकार फिट बैठता है" क्वेरी दृष्टिकोण नहीं है, आप यह कैसे करते हैं में सूक्ष्म प्रदर्शन प्रभाव हैं। आप परे जाना सिर्फ क्वेरी उचित जवाब लौटने के लिए, कोई फर्क नहीं पड़ता कि यह कैसे धीमी है बनाने चाहते हैं, तो Dynamic Search Conditions in T-SQLby Erland Sommarskog

यहाँ पर इस लेख को देखने के जिस भाग में करने के लिए एक कड़ी है x = @x OR @x IS NULL

1
WHERE ((COLUMN1 = @PARAM) OR (COLUMN1 IS NULL AND @PARAM IS NULL)) 
+1

'COLUMN = @ PARAM' सत्य नहीं होगा यदि' PARAM' शून्य है, तो दूसरी स्थिति ('@PARAM न्यूल नहीं है) अनावश्यक है। –

+0

@Damien_The_Unbeliever जून आप सही हैं, मैंने अनावश्यक कोड हटा दिया है। धन्यवाद –

0
Select column1 from Table1 
where (column2 IS NULL and @param IS NULL) 
or (column2 IS NOT NULL AND @param IS NOT NULL AND (column2 = @param) ) 
+1

'कॉलम 2 शून्य नहीं है' चेक अनावश्यक है, क्योंकि इसे 'कॉलम 2 = @ param' द्वारा कवर किया जाएगा ... जो इस उत्तर को पिछले वर्ष से स्वीकृत उत्तर का संक्षिप्त संक्षिप्त संस्करण बनाता है। –

+0

पिछले साल के उत्तर में यह था: (@param शून्य है और कॉलम 2 शून्य है) या (कॉलम 2 = @param) यदि @param शून्य नहीं है, तो पहली स्थिति गलत होगी, और दूसरा का मूल्यांकन केवल किया जाएगा: (कॉलम 2 = @param) मुझे पता चला है कि यदि आप चीजों की जांच कर रहे हैं (कॉलम 2 = @param) और यह शून्य हो सकता है, तो अतिरिक्त चेक –

2

मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन मेरे पास वही था, और एक और (छोटा) जवाब आया। नोट: यह केवल एमएस एसक्यूएल सर्वर के लिए काम कर सकता है, जो ISNULL (expr, प्रतिस्थापन) का समर्थन करता है।

SELECT column1 FROM table1 
WHERE ISNULL(column2,'') = ISNULL(@param,'') 

यह भी आप शून्य और रिक्त स्ट्रिंग उसी तरह का इलाज हो जाती है।

+1

होने के लिए सुरक्षित है यदि आपने अपना एसक्यूएल ISNULL के बजाय COALESCE का उपयोग करने के लिए बदल दिया है तो यह केवल SQL सर्वर से अधिक के लिए काम करेगा क्योंकि पूर्व के बाद आईएसओ/एएनएसआई परिभाषित किया गया है। –

संबंधित मुद्दे