Das scheint, als würdest du dir das Leben schwer machen. Lassen Sie sie null, dann tun Sie:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
Wenn param1
(das Prozedurargument; das Leben ist einfacher, wenn Ihre Parameter-/Variablennamen und Spaltennamen unterschiedlich sind ... also habe ich die Spaltennamen geändert, um es etwas klarer zu machen) null ist, wird es im Grunde ignoriert * und alle Zeilen passieren diesen Teil des Filters, ob der Spaltenwert null ist oder nicht null. Wenn param2
ist nicht null, dann ist is null
Prüfen Sie, ob dies fehlschlägt, und nur Zeilen mit (Nicht-Null-)Spaltenwerten, die mit param2
übereinstimmen Wert diesen Teil des Filters erfüllen.
* Bedingungen in einem or
kann in beliebiger Reihenfolge ausgewertet werden; Setzen des is null
check first bedeutet nicht unbedingt like
wird nicht ausgewertet - aber der Optimierer ist in solchen Dingen ziemlich schlau