Je travaille sur une procédure stockée avec plusieurs paramètres facultatifs. Certains de ces paramètres sont des valeurs uniques et il est assez facile d'utiliser une clause WHERE comme:Utilisation des paramètres de procédure stockée en option
WHERE (@parameter IS NULL OR column = @parameter)
Cependant, dans certains cas, la condition WHERE est plus compliquée:
WHERE (@NewGroupId IS NULL OR si.SiteId IN (SELECT gs.SiteId
FROM [UtilityWeb].[dbo].[GroupSites] AS gs
WHERE gs.GroupId = @NewGroupId))
Quand je décommentez ces complexes WHERE clauses, le temps d'exécution de la requête double et le plan d'exécution devient remarquablement plus compliqué. Bien que le plan d'exécution ne me dérange pas, doubler le temps d'exécution d'une requête est un problème certain.
Existe-t-il une meilleure pratique ou un modèle que d'autres ont trouvé pour travailler avec des paramètres facultatifs dans leurs procédures stockées?
Est-ce une de ces instances où SQL dynamique serait une meilleure solution?
Le plan d'exécution devrait vous déranger, car il vous indique exactement ce que l'exécution de la requête est en train de faire. –
La complexité ne me dérange pas tout à fait parce que j'ai des requêtes très complexes qui s'exécutent rapidement. Celui-ci ne le fait malheureusement pas. –
Voir aussi: http://stackoverflow.com/questions/532468/ignoring-a-null-parameter-in-t-sql/532510#532510 –