ich häufig gespeicherte Prozeduren mit Code wie folgt finden:Leistungsüberlegungen für Conditional Abfragen (Search Forms)
SELECT columns
FROM table_source
WHERE
(@Param1 IS NULL OR Column1 LIKE @Param1)
AND (@Param2 IS NULL OR Column2 = @Param2)
AND (@Param3 IS NULL OR ISNULL(Column3,'') LIKE @Param3 + '%')
…
Ist das besser als so etwas wie dieses:
WHERE
(Column1 LIKE COALESCE(@Param1, Column1))
AND (Column2 = COALESCE(@Param2, Column2))
AND (ISNULL(Column3,'') LIKE COALESCE(@Param3 + '%', ISNULL(Column3, '')))
…
und es ist egal, ob Ich ziehe die Ausdrücke, die nur von Parametern
dann verwenden Sie @Param3Search
anstelle von @Param3
?
Entschuldigung, etwas so weites zu fragen, aber ich bin sicher, dass es einige allgemeine Faustregeln für das Schreiben solcher Fragen gibt. Ich konnte dazu keine bestehende Frage finden.
[Catch-all-Abfragen] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/) ist eine hervorragende Ressource für diese Frage. – DMason