Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Plusieurs conditions dans la clause WHERE

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'