Du kan använda något i stil med detta:
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)
Om Param är 0 blir det första villkoret 0=0
och matchar för alla rader, så alla rader returneras. Om param är 1 eller 2, matchar endast respektive eller gren på det första villkoret, så det returnerar vad det andra villkoret anger.
Även option (recompile)
är verkligen viktigt (se artikeln i Martins kommentar). Den instruerar SQL-servern att använda runtime-värdena för parametrarna när man förbereder en exekveringsplan, så i princip:
- när @Param =0 blir frågan
select * from @Accessories
- när @Param =1 blir frågan
select * from @Accessories where atype = 'HDD'
- när @Param =2 blir frågan
select * from @Accessories where atype != 'HDD'