Cette question a déjà été posée plusieurs fois sur SO, mais il est intéressant de noter qu'il ne semble pas y avoir de consensus sur la meilleure réponse. Voici donc un résumé des principales options suggérées par différentes personnes (sans ordre particulier) :
- Mettez-le dans la base de données principale avec un
sp_
préfixe pour que SQL Server le recherche en premier - Mettez-le dans la base de données du modèle, afin qu'il soit automatiquement ajouté à toutes les nouvelles bases de données
- Créer une base de données uniquement pour les procédures "globales" (et autres objets) et les appeler à l'aide d'un nommage en trois parties
- Comme 3, mais créez des synonymes dans d'autres bases de données afin de ne pas avoir besoin de la dénomination en trois parties
- Utiliser des outils commerciaux ou développés en interne pour gérer le déploiement sur plusieurs bases de données
- Comme 5, mais déployer sur une base de données, puis
diff
les bases de données et appliquez le script diff pour déployer vers d'autres bases de données
À mon avis, 1 est un non-starter parce que Microsoft dit explicitement vous ne devez pas créer d'objets dans la base de données master. 2 sonne bien, mais dans la pratique, les bases de données sont restaurées ou copiées plus souvent que créées à partir de zéro (YMMV), donc l'utilisation du modèle n'est pas fiable.
3 et 4 sont bons pour les tables et les vues, mais le contexte d'exécution peut être un problème pour les procédures stockées et les fonctions. Mais cela dépend de la logique des procédures et cela peut être réalisable dans votre cas.
Mais 1-4 ont tous le problème potentiel que si vous n'avez qu'un seul objet, vous n'avez qu'une seule version de cet objet, et il est souvent utile d'avoir différentes versions disponibles dans différentes bases de données, pour les tests ou simplement pour différents clients.
5 et 6 sont des variations sur le même thème et je trouve personnellement que c'est la meilleure approche car le déploiement est un problème que vous devez résoudre de toute façon, alors autant le faire et vous assurer que vous avez les connaissances, les outils et les processus en place pour pouvoir déployer du code proprement et rapidement dans n'importe quelle base de données de manière contrôlée et automatisée.