Det virker som om du gør livet svært for dig selv. Lad dem være nul, og gør derefter:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Hvis param1
(procedureargumentet; livet er enklere, når dine parameter-/variablenavne og kolonnenavne er forskellige... så jeg har ændret kolonnenavnene for at gøre det lidt klarere) er null det ignoreres grundlæggende* og alle rækker passerer den del af filteret, om kolonneværdien er null eller ej. Hvis param2
er ikke null, så er is null
tjek for det fejler og kun rækker med (ikke-null) kolonneværdier, der matcher param2
værdi opfylder den del af filteret.
* Betingelser i en or
kan evalueres i enhver rækkefølge; at sætte is null
check first betyder ikke nødvendigvis like
vil ikke blive evalueret - men optimizeren er ret smart omkring den slags ting