Vous pourriez utiliser quelque chose comme ceci :
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)
Si Param vaut 0 la première condition devient 0=0
et correspond à toutes les lignes, donc toutes les lignes sont renvoyées. Si param est 1 ou 2, seule la branche ou respectif correspond à la première condition, il renvoie donc ce que la deuxième condition spécifie.
Aussi, l'option option (recompile)
est vraiment important (voir l'article dans le commentaire de Martin). Il demande au serveur SQL d'utiliser les valeurs d'exécution des paramètres lors de la préparation d'un plan d'exécution, donc en gros :
- lorsque @Param =0 la requête devient
select * from @Accessories
- lorsque @Param =1, la requête devient
select * from @Accessories where atype = 'HDD'
- lorsque @Param =2 la requête devient
select * from @Accessories where atype != 'HDD'