जहां तक मैं समझता हूं (और मैं भी वह व्यक्ति हूं जिसने एक भयानक विरासत डेटाबेस के खिलाफ लिखा है), गतिशील WHERE खंडों जैसी कोई चीज नहीं है। इसे हल नहीं किया गया है।
निजी तौर पर, मैं कोड में अपनी गतिशील खोज उत्पन्न करना पसंद करता हूं। परीक्षण सुविधाजनक बनाता है। ध्यान दें, जब आप कोड में अपने एसक्यूएल प्रश्न बनाते हैं, तो उपयोगकर्ता इनपुट में संयोजित न करें। अपने @ variables का प्रयोग करें!
COALESCE ऑपरेटर का उपयोग करने का एकमात्र विकल्प है। मान लें कि आपके पास निम्न तालिका है:
Users
-----------
Name nvarchar(20)
Nickname nvarchar(10)
और आप वैकल्पिक रूप से नाम या उपनाम के लिए खोजना चाहते हैं। निम्नलिखित क्वेरी यह करेगी:
SELECT Name, Nickname
FROM Users
WHERE
Name = COALESCE(@name, Name) AND
Nickname = COALESCE(@nick, Nickname)
यदि आप कुछ खोजना नहीं चाहते हैं, तो बस एक शून्य में पास करें। उदाहरण के लिए, निम्नलिखित नाम में @nick परिणामों के लिए @name और null के लिए "ब्रायन" में गुजरना निम्न क्वेरी का मूल्यांकन किया जा रहा है:
SELECT Name, Nickname
FROM Users
WHERE
Name = 'brian' AND
Nickname = Nickname
सहकर्मी ऑपरेटर शून्य पहचान को पहचान मूल्यांकन में बदल देता है, जो हमेशा सत्य होता है और जहां खंड को प्रभावित नहीं करता है।