sql >> Database >  >> RDS >> Sqlserver

Meerdere voorwaarden in WHERE-clausule

Je zou zoiets als dit kunnen gebruiken:

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)

Als Param 0 is, wordt de eerste voorwaarde 0=0 en komt overeen met alle rijen, dus alle rijen worden geretourneerd. Als param 1 of 2 is, komt alleen de respectievelijke of vertakking overeen met de eerste voorwaarde, dus het geeft terug wat de tweede voorwaarde specificeert.

Ook de option (recompile) is echt belangrijk (bekijk het artikel in de opmerking van Martin). Het instrueert SQL-server om de runtime-waarden van de parameters te gebruiken bij het opstellen van een uitvoeringsplan, dus eigenlijk:

  • wanneer @Param =0 wordt de zoekopdracht select * from @Accessories
  • wanneer @Param =1 de query wordt select * from @Accessories where atype = 'HDD'
  • wanneer @Param =2 de query wordt select * from @Accessories where atype != 'HDD'


  1. Postgresql SELECT willekeurig met unieke waarde

  2. Kunnen we een GROUP_CONCAT-functie definiëren in PostgreSQL?

  3. inlogsessie vernietigd na vernieuwen

  4. retourneer één waarde uit de database met mysql php pdo