Sepertinya Anda membuat hidup ini sulit untuk diri sendiri. Biarkan nol, lalu lakukan:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Jika param1
(argumen prosedur; hidup lebih sederhana ketika parameter/nama variabel dan nama kolom Anda berbeda ... jadi saya telah mengubah nama kolom untuk membuatnya sedikit lebih jelas) adalah nol pada dasarnya diabaikan* dan semua baris melewati bagian itu filter, apakah nilai kolom adalah nol atau tidak nol. Jika param2
adalah tidak null maka is null
periksa yang gagal dan hanya baris dengan nilai kolom (bukan-null) yang cocok dengan param2
nilai memenuhi bagian filter tersebut.
* Ketentuan dalam or
dapat dievaluasi dalam urutan apa pun; menempatkan is null
cek dulu bukan berarti like
tidak akan dievaluasi - tetapi pengoptimal cukup pintar dalam hal semacam itu