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'