sql >> Databasteknik >  >> RDS >> Sqlserver

Flera villkor i WHERE-satsen

Du kan använda något i stil med detta:

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)

Om Param är 0 blir det första villkoret 0=0 och matchar för alla rader, så alla rader returneras. Om param är 1 eller 2, matchar endast respektive eller gren på det första villkoret, så det returnerar vad det andra villkoret anger.

Även option (recompile) är verkligen viktigt (se artikeln i Martins kommentar). Den instruerar SQL-servern att använda runtime-värdena för parametrarna när man förbereder en exekveringsplan, så i princip:

  • när @Param =0 blir frågan select * from @Accessories
  • när @Param =1 blir frågan select * from @Accessories where atype = 'HDD'
  • när @Param =2 blir frågan select * from @Accessories where atype != 'HDD'


  1. Hur kan jag lägga till kommentarer i MySQL?

  2. Hur man trimmar de tre första tecknen baserat på den första bokstaven (uttrycket) innan det infogas i databasen

  3. Hur återställer man stoppord i MYSQL?

  4. ROW_NUMBER fråga