Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL केवल तभी फ़िल्टर जोड़ें जब कोई चर रिक्त न हो

आप अपनी आवश्यकता का अनुवाद इसमें कर सकते हैं:

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

प्रदर्शन के संदर्भ में, केवल अंतिम इंडेक्स का उपयोग करेगा, मेरा मानना ​​है कि पहला सबसे तेज होगा, लेकिन यह इंडेक्स, टेबल के आकार आदि के आधार पर बदल सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक विशिष्ट मान SQL सर्वर के लिए सभी टेबल, सभी कॉलम खोजें

  2. SQL सर्वर में निर्भरता खोजें:sql_expression_dependencies

  3. एकता से डेटाबेस से कैसे जुड़ें

  4. जांचें कि क्या तालिका SQL सर्वर में मौजूद है

  5. क्या SQL सर्वर में DECIMAL और NUMERIC के बीच कोई अंतर है?