Det verkar som att du gör livet svårt för dig själv. Lämna dem null och gör sedan:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Om param1
(procedurargumentet; livet är enklare när dina parameter-/variabelnamn och kolumnnamn är olika... så jag har ändrat kolumnnamnen för att göra det lite tydligare) är null det ignoreras i princip* och alla rader passerar den delen för filtret, om kolumnvärdet är null eller inte. Om param2
är inte null då is null
kontrollera om det misslyckas och endast rader med kolumnvärden (inte null) som matchar param2
värde uppfyller den delen av filtret.
* Villkor i en or
kan utvärderas i valfri ordning; att sätta is null
check first betyder inte nödvändigtvis like
kommer inte att utvärderas - men optimeraren är ganska smart med sånt där