sql >> Base de Datos >  >> RDS >> Sqlserver

Múltiples condiciones en la cláusula WHERE

Podrías usar algo como esto:

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 es 0, la primera condición se convierte en 0=0 y coincide con todas las filas, por lo que se devuelven todas las filas. Si param es 1 o 2, solo el respectivo o rama coincide con la primera condición, por lo que devuelve lo que especifica la segunda condición.

Además, la opción option (recompile) es realmente importante (ver el artículo en el comentario de Martin). Le indica al servidor SQL que use los valores de tiempo de ejecución de los parámetros al preparar un plan de ejecución, así que básicamente:

  • cuando @Param =0 la consulta se convierte en select * from @Accessories
  • cuando @Param =1 la consulta se convierte en select * from @Accessories where atype = 'HDD'
  • cuando @Param =2 la consulta se convierte en select * from @Accessories where atype != 'HDD'