Изглежда, че сам си правиш живота труден. Оставете ги нули, след което направете:
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
няма да бъдат оценени - но оптимизаторът е доста умен за такива неща