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

Flere betingelser i WHERE-klausulen

Du kan bruge noget som dette:

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)

Hvis Param er 0, bliver den første betingelse 0=0 og matcher for alle rækker, så alle rækker returneres. Hvis param er 1 eller 2, matcher kun den respektive gren på den første betingelse, så den returnerer, hvad den anden betingelse angiver.

Også option (recompile) er virkelig vigtigt (se artiklen i Martins kommentar). Det instruerer SQL-serveren til at bruge runtime-værdierne for parametrene, når der udarbejdes en eksekveringsplan, så grundlæggende:

  • når @Param =0 bliver forespørgslen select * from @Accessories
  • når @Param =1 bliver forespørgslen select * from @Accessories where atype = 'HDD'
  • når @Param =2 bliver forespørgslen select * from @Accessories where atype != 'HDD'


  1. Sådan finder og erstatter du tekst i mysql-tabel

  2. Brug Access eller MySQL som en backend-database

  3. PARTITION BY med og uden KEEP i Oracle

  4. Flere tekstværdier i én kolonne, kræver forespørgslen for at finde det mest gentagelige ord