Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Множество условия в клаузата WHERE

Можете да използвате нещо подобно:

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)

Ако Param е 0, първото условие става 0=0 и съвпада за всички редове, така че се връщат всички редове. Ако param е 1 или 2, само съответният или клон съвпада с първото условие, така че връща това, което второто условие посочва.

Освен това option (recompile) е наистина важно (вижте статията в коментара на Мартин). Той инструктира SQL сървъра да използва стойностите по време на изпълнение на параметрите, когато изготвя план за изпълнение, така че основно:

  • когато @Param =0, заявката става select * from @Accessories
  • когато @Param =1, заявката става select * from @Accessories where atype = 'HDD'
  • когато @Param =2, заявката става select * from @Accessories where atype != 'HDD'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предотвратите автоматичното изключване на SQL Server LocalDB?

  2. Проверете дали даден параметър е нулев или празен в съхранена процедура

  3. .NET извикванията на базата данни са бавни, когато се използва COM Interop, бързо чрез анализатор на заявки

  4. Какъв е максималният брой редове, които може да съхранява една таблица на SQL Server?

  5. Създаване на изчислена колона в SQL Server 2008