Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Condizioni multiple nella clausola WHERE

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'