Je zou zoiets als dit kunnen gebruiken:
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)
Als Param 0 is, wordt de eerste voorwaarde 0=0
en komt overeen met alle rijen, dus alle rijen worden geretourneerd. Als param 1 of 2 is, komt alleen de respectievelijke of vertakking overeen met de eerste voorwaarde, dus het geeft terug wat de tweede voorwaarde specificeert.
Ook de option (recompile)
is echt belangrijk (bekijk het artikel in de opmerking van Martin). Het instrueert SQL-server om de runtime-waarden van de parameters te gebruiken bij het opstellen van een uitvoeringsplan, dus eigenlijk:
- wanneer @Param =0 wordt de zoekopdracht
select * from @Accessories
- wanneer @Param =1 de query wordt
select * from @Accessories where atype = 'HDD'
- wanneer @Param =2 de query wordt
select * from @Accessories where atype != 'HDD'