Този въпрос вече е задаван няколко пъти на SO, но интересното е, че изглежда няма консенсус относно най-добрия отговор. И така, ето обобщение на основните опции, предложени от различни хора (без специален ред):
- Поставете го в главната база данни с
sp_
префикс, така че SQL Server първо да го търси там - Поставете го в базата данни на модела, така че автоматично да се добавя към всички нови бази данни
- Създайте база данни само за „глобални“ процедури (и други обекти) и ги извикайте, като използвате именуване от три части
- Като 3, но създайте синоними в други бази данни, така че да не се нуждаете от именуване от три части
- Използвайте търговски или самостоятелно разработени инструменти за управление на внедряването в множество бази данни
- Както 5, но внедряване в една база данни, след това
diff
базите данни и приложете diff скрипта за внедряване в други бази данни
Според мен 1 не е начинаещ, защото Microsoft изрично казва не трябва да създавате обекти в основната база данни. 2 звучи добре, но на практика базите данни се възстановяват или копират по-често, отколкото се създават от нулата (YMMV), така че използването на модел е ненадеждно.
3 и 4 са добри за таблици и изгледи, но контекстът на изпълнение може да бъде проблем за съхранените процедури и функции. Но това зависи от логиката в процедурите и може да е работещо във вашия случай.
Но всички 1-4 имат потенциалния проблем, че ако имате само един обект, имате само една версия на този обект и често е полезно да имате различни версии, налични в различни DB, за тестване или просто за различни клиенти.
5 и 6 са вариации на една и съща тема и аз лично намирам, че това е най-добрият подход, защото внедряването е проблем, който така или иначе трябва да решите, така че можете да го направите и да се уверите, че разполагате със знанията, инструментите и процесите за да можете да внедрявате код чисто и бързо във всяка база данни по контролиран, автоматизиран начин.