Можете да използвате нещо подобно:
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)
Ако Param е 0, първото условие става 0=0
и съвпада за всички редове, така че се връщат всички редове. Ако param е 1 или 2, само съответният или клон съвпада с първото условие, така че връща това, което второто условие посочва.
Освен това option (recompile)
е наистина важно (вижте статията в коментара на Мартин). Той инструктира SQL сървъра да използва стойностите по време на изпълнение на параметрите, когато изготвя план за изпълнение, така че основно:
- когато @Param =0, заявката става
select * from @Accessories
- когато @Param =1, заявката става
select * from @Accessories where atype = 'HDD'
- когато @Param =2, заявката става
select * from @Accessories where atype != 'HDD'