Dat lijkt alsof je het jezelf moeilijk maakt. Laat ze null en doe dan:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Als param1
(het procedureargument; het leven is eenvoudiger wanneer uw parameter-/variabelenamen en kolomnamen anders zijn ... dus ik heb de kolomnamen gewijzigd om het een beetje duidelijker te maken) is null, het wordt in principe genegeerd * en alle rijen passeren dat deel van het filter, ongeacht of de kolomwaarde null is of niet. Als param2
is niet null dan is de is null
controleer of dat mislukt en alleen rijen met (niet-null) kolomwaarden die overeenkomen met param2
waarde voldoen aan dat deel van het filter.
* Voorwaarden in een or
kan in elke volgorde worden geëvalueerd; de is null
. zetten eerst controleren betekent niet noodzakelijk de like
zal niet worden geëvalueerd - maar de optimizer is behoorlijk slim in dat soort dingen