Điều đó có vẻ như bạn đang tự làm khó mình. Để trống, sau đó thực hiện:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Nếu param1
(đối số thủ tục; cuộc sống đơn giản hơn khi tên tham số / biến và tên cột của bạn khác nhau ... vì vậy tôi đã thay đổi tên cột để làm cho nó rõ ràng hơn một chút) là null về cơ bản nó bị bỏ qua * và tất cả các hàng đều vượt qua phần đó của bộ lọc, cho dù giá trị cột là null hay không null. Nếu param2
là không null thì is null
kiểm tra xem không thành công và chỉ các hàng có giá trị cột (not-null) khớp với param2
giá trị đáp ứng phần đó của bộ lọc.
* Các điều kiện trong or
có thể được đánh giá theo bất kỳ thứ tự nào; đặt is null
kiểm tra trước không nhất thiết có nghĩa là like
sẽ không được đánh giá - nhưng trình tối ưu hóa khá thông minh về điều đó