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

Clause Conditional Check in Where

Certaines personnes utilisent cette technique

... WHERE @itemid IS NULL OR tbl.itemid = @itemid

Cela garantit cependant que vous n'obtiendrez jamais de recherche d'index sur la colonne itemid.

Une meilleure approche si la table est trop grande est de diviser la requête en 2 cas distincts

IF(@itemid IS NULL)
  SELECT foo FROM bar
ELSE
  SELECT foo FROM bar WHERE itemid = @itemid

Si le nombre de combinaisons est trop important, vous pouvez envisager le SQL dynamique. Assurez-vous d'abord de comprendre l'injection SQL.

Réf :Conditions de recherche dynamiques dans T-SQL