Sembra che ti stai rendendo la vita difficile. Lasciali nulli, quindi fai:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Se param1
(l'argomento della procedura; la vita è più semplice quando i nomi dei parametri/variabili e i nomi delle colonne sono diversi... quindi ho cambiato i nomi delle colonne per renderlo un po' più chiaro) è nullo, sostanzialmente viene ignorato* e tutte le righe passano quella parte del filtro, indipendentemente dal fatto che il valore della colonna sia null o meno. Se param2
è non null allora is null
verifica se non riesce e solo le righe con valori di colonna (non nulli) che corrispondono a param2
il valore soddisfa quella parte del filtro.
* Condizioni in un or
può essere valutato in qualsiasi ordine; mettendo il is null
check first non significa necessariamente il like
non verrà valutato, ma l'ottimizzatore è piuttosto intelligente su questo genere di cose