Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server 2008 - Requête conditionnelle

meilleure source pour les conditions de recherche dynamique :

Conditions de recherche dynamiques dans T-SQL par Erland Sommarskog

il y a beaucoup d'implications subtiles sur la façon dont vous procédez pour savoir si un index peut être utilisé ou non. Si vous êtes sur la bonne version de SQL Server 2008, vous pouvez simplement ajouter OPTION (RECOMPILE) à la requête et la valeur de la variable locale au moment de l'exécution est utilisée pour les optimisations.

Considérez ceci, OPTION (RECOMPILE) prendra ce code (où aucun index ne peut être utilisé avec ce gâchis de OR s):

WHERE
    (@search1 IS NULL or [email protected])
    AND (@search2 IS NULL or [email protected])
    AND (@search3 IS NULL or [email protected])

et l'optimiser au moment de l'exécution pour qu'il soit (à condition que seul @Search2 ait été transmis avec une valeur) :

WHERE
    [email protected]

et un index peut être utilisé (si vous en avez un défini sur Column2)