Bạn có thể sử dụng một cái gì đó như thế này:
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)
Nếu Param là 0 thì điều kiện đầu tiên sẽ trở thành 0=0
và đối sánh cho tất cả các hàng, vì vậy tất cả các hàng đều được trả về. Nếu tham số là 1 hoặc 2, chỉ có tương ứng hoặc nhánh phù hợp với điều kiện đầu tiên, do đó, nó trả về những gì điều kiện thứ hai chỉ định.
Ngoài ra, tùy chọn option (recompile)
là thực sự quan trọng (xem bài báo trong bình luận của Martin). Nó hướng dẫn máy chủ SQL sử dụng các giá trị thời gian chạy của các tham số khi chuẩn bị kế hoạch thực thi, về cơ bản:
- khi @Param =0 truy vấn trở thành
select * from @Accessories
- khi @Param =1 truy vấn trở thành
select * from @Accessories where atype = 'HDD'
- khi @Param =2 truy vấn trở thành
select * from @Accessories where atype != 'HDD'