Parece que você está dificultando a vida para si mesmo. Deixe-os nulos e faça:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Se
param1
(o argumento do procedimento; a vida é mais simples quando seus nomes de parâmetros/variáveis e nomes de colunas são diferentes... do filtro, se o valor da coluna é nulo ou não nulo. Se param2
é não null então o is null
verifique se há falha e apenas linhas com valores de coluna (não nulos) que correspondam a param2
valor atender a essa parte do filtro. * Condições em um
or
podem ser avaliados em qualquer ordem; colocando o is null
verificar primeiro não significa necessariamente o like
não será avaliado - mas o otimizador é muito inteligente sobre esse tipo de coisa