Dans SQL Server, à quoi sert le regroupement de procédures stockées?

35

L'un des problèmes les plus troublants que j'ai eu à traiter concerne les groupes de procédures stockées. Avec une procédure stockée usp_DoSomethingAwesome, je peux créer ce proc dans un autre groupe en l'appelant usp_DoSomethingAwesome;2.

J'ai découvert cela lors du dépannage de certains problèmes de réplication (Publisher: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) Liés à certaines des procédures stockées de réplication stockées d'insertion, de mise à jour et de suppression générées par le système.

Quel est le but / la pensée derrière cette capacité de "groupement"?

swasheck
la source

Réponses:

32

C'est comme surcharger une méthode. En gros, vous pouvez créer deux ou plusieurs versions de votre procédure stockée, chacune faisant des choses différentes: prendre un nombre différent de paramètres, agir sur des tables différentes, produire une sortie différente, etc.

Elles s'appellent Procédures numérotées et elles sont absolument obsolètes ( annoncées depuis 2005 ). Elles sont toujours prises en charge dans SQL Server 2012, mais certaines fonctionnalités ne fonctionnent pas bien avec elles. Par exemple, elles sont considérées comme une violation de confinement dans les bases de données contenues et toute procédure numérotée> 1 ne sera pas créée:

Msg 12829, Niveau 16, Etat 1, Procédure blat, Ligne 1
La procédure stockée 'dbo.blat' fait référence à un groupe de procédures stockées numérotées. Les procédures stockées numérotées ne sont pas disponibles dans les bases de données contenues. Veuillez consulter la rubrique Documentation en ligne Comprendre les bases de données contenues pour plus d'informations sur les bases de données contenues.

Aaron Bertrand
la source
5

La possibilité (obsolète) de regrouper des procédures stockées semble exister pour un seul but (et plutôt ridicule): la possibilité de supprimer en masse via une seule DROPinstruction. Selon la documentation MSDN de SQL Server 2000 pour la création d'une procédure stockée :

Regroupement
Une procédure peut être créée avec le même nom qu'une procédure stockée existante si un numéro d'identification différent lui est attribué, ce qui permet de regrouper les procédures de manière logique. Les procédures de regroupement portant le même nom permettent leur suppression en même temps. Les procédures utilisées dans la même application sont souvent regroupées de cette façon. Par exemple, les procédures utilisées avec l' application my_app peuvent s'appeler my_proc; 1, my_proc; 2 , etc. La suppression de my_proc supprime le groupe entier. Une fois les procédures regroupées, les procédures individuelles du groupe ne peuvent pas être supprimées.

L'utilisation de cette construction n'offre aucun avantage supplémentaire, car l'utilisation du même nom de base ne permet même pas la surcharge (les signatures n'ont pas besoin d'être uniques, et aucun routage d'exécution automatique vers un "numéro" particulier) et vous devez donc toujours utilisez le "numéro" lors de l'exécution. D'où la détermination de "bête" (et c'est probablement trop gentil à ce sujet ;-).

Salomon Rutzky
la source