Mi capita spesso di trovare stored procedure con codice come questo:Considerazioni sulle prestazioni per condizionali query di ricerca (forme)
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 + '%')
…
E` meglio di qualcosa di simile:
WHERE
(Column1 LIKE COALESCE(@Param1, Column1))
AND (Column2 = COALESCE(@Param2, Column2))
AND (ISNULL(Column3,'') LIKE COALESCE(@Param3 + '%', ISNULL(Column3, '')))
…
e cosa importa se Estraggo le espressioni che dipendono solo dai parametri
DECLARE @Param3Search nvarchar(30);
SET @Param3Search = @Param3 + '%';
quindi utilizzare @Param3Search
anziché @Param3
?
Siamo spiacenti di chiedere una cosa così ampia, ma sono sicuro che ci sono alcune regole generali per scrivere tali query. Non sono riuscito a trovare una domanda esistente su questo.
[catch-all query] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/) è una risorsa eccellente per questo domanda. – DMason