それはあなたが自分自身のために人生を困難にしているようです。それらをnullのままにしてから、次のようにします。
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
param1
の場合 (プロシージャの引数。パラメータ/変数名と列名が異なると、作業が簡単になります。列名を少し明確にするために変更しました)nullの場合、基本的に無視されます*。すべての行がその部分を通過します。列の値がnullであるかどうかに関係なく、フィルターのparam2
の場合 ではありません nullの場合、is null
それが失敗し、param2
に一致する(nullではない)列値を持つ行のみをチェックします 値はフィルターのその部分を満たしています。
*or
の条件 任意の順序で評価できます。 is null
最初に確認することは、必ずしもlike
を意味するわけではありません 評価されません-しかし、オプティマイザーはその種のことについてかなり賢いです