sql >> Databáze >  >> RDS >> Sqlserver

Více podmínek v klauzuli WHERE

Můžete použít něco takového:

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)

Pokud je Param 0, první podmínka se stane 0=0 a odpovídá pro všechny řádky, takže jsou vráceny všechny řádky. Pokud je parametr 1 nebo 2, odpovídá první podmínce pouze příslušná větev, takže vrací to, co určuje druhá podmínka.

Také option (recompile) je opravdu důležité (viz článek v Martinově komentáři). Instruuje SQL server, aby použil runtime hodnoty parametrů při přípravě plánu provádění, takže v podstatě:

  • když @Param =0, dotaz se změní na select * from @Accessories
  • když @Param =1, dotaz se změní na select * from @Accessories where atype = 'HDD'
  • když @Param =2 se dotaz změní na select * from @Accessories where atype != 'HDD'


  1. Odeslání obrázku do databáze MySQL s Androidem

  2. Vysoká dostupnost při nízkém rozpočtu – nasazení minimálního klastru MySQL Galera se dvěma uzly

  3. Opakující se hodnoty ve sloupci

  4. Ve stejném sloupci se počítá jiná hodnota