आप अपनी आवश्यकता का अनुवाद इसमें कर सकते हैं:
SELECT route_id [ROUTE_ID]
FROM route_master(NOLOCK)
WHERE route_ou = 2
AND (@l_s_query is null OR route_query = @l_s_query)
AND lang_id = 1
OPTION (RECOMPILE)
OPTION (RECOMPILE)
वैकल्पिक है लेकिन अतिरिक्त संकलन समय की कीमत पर बेहतर निष्पादन योजनाएं दे सकता है जैसा कि विषय पर विहित लेख में चर्चा की गई है T‑SQL में गतिशील खोज स्थितियां
या COALESCE()
. के साथ OR
. से बचने के लिए :
WHERE route_ou = 2
AND COALESCE(@l_s_query,route_query) = route_query
AND lang_id = 1
नोट: जैसा कि @jarlh ने कहा, अगर route_query
अशक्त है, इससे शून्य तुलना के कारण कुछ समस्याएं हो सकती हैं, इसलिए आप पहली क्वेरी का उपयोग करना चाह सकते हैं।
इसका एक अन्य विकल्प UNION ALL
. का उपयोग करते हुए दो अलग-अलग प्रश्न हैं , प्रत्येक शर्त के लिए एक -
SELECT .. FROM ..
WHERE @l_s_query IS NULL
UNION ALL
SELECT .. FROM ..
WHERE @l_s_query = route_query
प्रदर्शन के संदर्भ में, केवल अंतिम इंडेक्स का उपयोग करेगा, मेरा मानना है कि पहला सबसे तेज होगा, लेकिन यह इंडेक्स, टेबल के आकार आदि के आधार पर बदल सकता है।