Potresti usare qualcosa del genere:
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)
Se Param è 0 la prima condizione diventa 0=0
e corrisponde a tutte le righe, quindi vengono restituite tutte le righe. Se param è 1 o 2, solo il rispettivo o ramo corrisponde alla prima condizione, quindi restituisce ciò che specifica la seconda condizione.
Inoltre, l'opzione option (recompile)
è davvero importante (guarda l'articolo nel commento di Martin). Indica al server SQL di utilizzare i valori di runtime dei parametri durante la preparazione di un piano di esecuzione, quindi sostanzialmente:
- quando @Param =0 la query diventa
select * from @Accessories
- quando @Param =1 la query diventa
select * from @Accessories where atype = 'HDD'
- quando @Param =2 la query diventa
select * from @Accessories where atype != 'HDD'