Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Beberapa kondisi dalam klausa WHERE

Anda dapat menggunakan sesuatu seperti ini:

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)

Jika Param adalah 0 kondisi pertama menjadi 0=0 dan cocok untuk semua baris, jadi semua baris dikembalikan. Jika param adalah 1 atau 2, hanya masing-masing atau cabang yang cocok dengan kondisi pertama, sehingga mengembalikan apa yang ditentukan oleh kondisi kedua.

Juga, option (recompile) sangat penting (lihat artikel di komentar Martin). Ini menginstruksikan SQL server untuk menggunakan nilai runtime dari parameter saat menyiapkan rencana eksekusi, jadi pada dasarnya:

  • ketika @Param =0 kueri menjadi select * from @Accessories
  • ketika @Param =1 kueri menjadi select * from @Accessories where atype = 'HDD'
  • ketika @Param =2 kueri menjadi 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. Tidak Dapat Membunuh Rollback Transaksi SPID yang Sedang Berlangsung

  2. Coba buat tabel dari Select - SqL Server 2008 melempar kesalahan

  3. Cara Menggunakan Prosedur Tersimpan 'sp_server_info' di SQL Server

  4. Menyimpan file besar dalam database menyebabkan Pengecualian tipe 'System.OutOfMemoryException'

  5. Apa sintaks yang benar untuk menggunakan Database.ExecuteSqlCommand dengan parameter?