आप कुछ इस तरह इस्तेमाल कर सकते हैं:
select *
from @Accessories
where (@Param = 0)
or (@Param = 1 and atype = 'HDD')
--or (@Param = 1 and itype = 1) , if itype and atype are connected
or (@Param = 2 and atype != 'HDD')
option (recompile)
अगर परम 0 है तो पहली शर्त हो जाती है 0=0
और सभी पंक्तियों के लिए मेल खाता है, इसलिए सभी पंक्तियों को वापस कर दिया जाता है। यदि परम 1 या 2 है, तो केवल संबंधित या शाखा पहली शर्त से मेल खाती है, इसलिए यह वही लौटाता है जो दूसरी शर्त निर्दिष्ट करती है।
साथ ही, option (recompile)
वास्तव में महत्वपूर्ण है (मार्टिन की टिप्पणी में लेख देखें)। यह SQL सर्वर को निष्पादन योजना तैयार करते समय पैरामीटर के रनटाइम मानों का उपयोग करने का निर्देश देता है, इसलिए मूल रूप से:
- जब @परम =0 क्वेरी बन जाती है
select * from @Accessories
- जब @परम =1 क्वेरी बन जाती है
select * from @Accessories where atype = 'HDD'
- जब @परम =2 क्वेरी बन जाती है
select * from @Accessories where atype != 'HDD'