Esta pregunta ya se ha hecho varias veces en SO, pero curiosamente parece que no hay consenso sobre la mejor respuesta. Así que aquí hay un resumen de las principales opciones que varias personas han sugerido (sin ningún orden especial):
- Ponerlo en la base de datos maestra con un
sp_
prefijo para que SQL Server lo busque allí primero - Colóquelo en la base de datos del modelo, para que se agregue automáticamente a todas las bases de datos nuevas
- Cree una base de datos solo para procedimientos 'globales' (y otros objetos) y llámelos usando nombres de tres partes
- Como 3, pero cree sinónimos en otras bases de datos para que no necesite el nombre de tres partes
- Utilice herramientas comerciales o de desarrollo propio para administrar la implementación en varias bases de datos
- Como 5, pero implementar en una base de datos, luego
diff
las bases de datos y aplicar el script diff para implementar en otras bases de datos
En mi opinión, 1 no es un iniciador porque Microsoft dice explícitamente no debe crear objetos en la base de datos maestra. 2 suena bien, pero en la práctica, las bases de datos se restauran o copian con más frecuencia que las que se crean desde cero (YMMV), por lo que el uso del modelo no es confiable.
3 y 4 son buenos para tablas y vistas, pero el contexto de ejecución puede ser un problema para funciones y procedimientos almacenados. Pero esto depende de la lógica de los procedimientos y puede funcionar en su caso.
Pero 1-4 tienen el problema potencial de que si solo tiene un objeto, solo tiene una versión de ese objeto y, a menudo, es útil tener diferentes versiones disponibles en diferentes bases de datos, para pruebas o simplemente para diferentes clientes.
5 y 6 son variaciones sobre el mismo tema y personalmente considero que este es el mejor enfoque porque la implementación es un problema que debe resolver de todos modos, por lo que también podría hacerlo y asegurarse de tener el conocimiento, las herramientas y los procesos en su lugar. para poder implementar código de forma limpia y rápida en cualquier base de datos de forma controlada y automatizada.