En SQL Server, ¿cuál es el propósito de agrupar procedimientos almacenados?

35

Uno de los problemas más desconcertantes con los que he tenido que lidiar tiene que ver con los grupos de Procedimiento almacenado. Dado un procedimiento almacenado, usp_DoSomethingAwesomepuedo crear ese proceso en otro grupo al llamarlo usp_DoSomethingAwesome;2.

Descubrí esto al solucionar algunos problemas de replicación (Editor: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) Que surgieron con algunos de los procedimientos almacenados de replicación de inserción, actualización y eliminación generados por el sistema.

¿Cuál es el propósito / pensamiento detrás de tener esta habilidad de "agrupamiento"?

swasheck
fuente

Respuestas:

32

Esto es como sobrecargar un método. Esencialmente, podría crear dos o más versiones de su procedimiento almacenado, donde cada una hace cosas diferentes: tomar un número diferente de parámetros, operar en tablas diferentes, tener resultados diferentes, etc.

Se denominan procedimientos numerados y están en desuso ( anunciados desde 2005 ). Todavía son compatibles con SQL Server 2012, pero algunas características no funcionan bien con ellos. Por ejemplo, se consideran una brecha de contención en las bases de datos contenidas, y no se creará ningún procedimiento numerado> 1:

Mensaje 12829, Nivel 16, Estado 1, Blat de procedimiento, Línea 1
El procedimiento almacenado 'dbo.blat' se refiere a un grupo de procedimientos almacenados numerados. Los procedimientos almacenados numerados no están disponibles en las bases de datos contenidas. Consulte el tema de Libros en línea Comprender las bases de datos contenidas para obtener más información sobre las bases de datos contenidas.

Aaron Bertrand
fuente
5

La capacidad (en desuso) de agrupar procedimientos almacenados parece existir para un único propósito (y bastante tonto): la capacidad de eliminar en masa a través de una sola DROPdeclaración. De acuerdo con la documentación de MSDN de SQL Server 2000 para crear un procedimiento almacenado :

Agrupación
Se puede crear un procedimiento con el mismo nombre que un procedimiento almacenado existente si se le da un número de identificación diferente, lo que permite que los procedimientos se agrupen lógicamente. Los procedimientos de agrupación con el mismo nombre les permiten eliminarse al mismo tiempo. Los procedimientos utilizados en la misma aplicación a menudo se agrupan de esta manera. Por ejemplo, los procedimientos utilizados con la aplicación my_app pueden llamarse my_proc; 1, my_proc; 2 , y así sucesivamente. Al eliminar my_proc, se elimina todo el grupo. Una vez que se han agrupado los procedimientos, no se pueden eliminar los procedimientos individuales dentro del grupo.

No hay beneficios adicionales al usar esta construcción dado que usar el mismo nombre base ni siquiera permite la sobrecarga (las firmas no necesitan ser únicas y no hay enrutamiento de ejecución automática a un "número" en particular) y, por lo tanto, aún necesita use el "número" cuando ejecute. De ahí la determinación de "tonto" (y eso probablemente sea demasiado amable al respecto ;-).

Solomon Rutzky
fuente