Изглежда, че сам си правиш живота труден. Оставете ги нули, след което направете:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Ако param1 (аргументът на процедурата; животът е по-прост, когато имената на параметрите/променливите и имената на колоните са различни... така че промених имената на колоните, за да стане малко по-ясно) е null, основно се игнорира* и всички редове преминават тази част на филтъра, независимо дали стойността на колоната е нула или не е нула. Ако param2 е не null, тогава is null проверката за това е неуспешна и само редове с (не-нулеви) стойности на колона, които съответстват на param2 стойност отговаря на тази част от филтъра.
* Условия в or могат да бъдат оценени в произволен ред; поставянето на is null check first не означава непременно like няма да бъдат оценени - но оптимизаторът е доста умен за такива неща