Du kan bruge noget som dette:
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)
Hvis Param er 0, bliver den første betingelse 0=0
og matcher for alle rækker, så alle rækker returneres. Hvis param er 1 eller 2, matcher kun den respektive gren på den første betingelse, så den returnerer, hvad den anden betingelse angiver.
Også option (recompile)
er virkelig vigtigt (se artiklen i Martins kommentar). Det instruerer SQL-serveren til at bruge runtime-værdierne for parametrene, når der udarbejdes en eksekveringsplan, så grundlæggende:
- når @Param =0 bliver forespørgslen
select * from @Accessories
- når @Param =1 bliver forespørgslen
select * from @Accessories where atype = 'HDD'
- når @Param =2 bliver forespørgslen
select * from @Accessories where atype != 'HDD'