Dette spørgsmål er blevet stillet flere gange allerede på SO, men interessant nok synes der ikke at være nogen konsensus om det bedste svar. Så her er en oversigt over de vigtigste muligheder, som forskellige mennesker har foreslået (uden speciel rækkefølge):
- Sæt den i masterdatabasen med en
sp_
præfiks, så SQL Server søger efter det der først - Placer det i modeldatabasen, så det automatisk tilføjes til alle nye DB'er
- Opret en database kun for 'globale' procedurer (og andre objekter), og kald dem ved hjælp af tredelt navngivning
- Som 3, men opret synonymer i andre databaser, så du ikke behøver den tredelte navngivning
- Brug kommercielle eller egenudviklede værktøjer til at administrere implementering til flere databaser
- Som 5, men implementer til én database, derefter
diff
databaserne og anvende diff-scriptet til at implementere til andre databaser
Efter min mening er 1 en ikke-starter, fordi Microsoft eksplicit siger du bør ikke oprette objekter i masterdatabasen. 2 lyder godt, men i praksis gendannes eller kopieres databaser oftere end oprettet fra bunden (YMMV), så brugen af modellen er upålidelig.
3 og 4 er gode til tabeller og visninger, men udførelseskontekst kan være et problem for lagrede procedurer og funktioner. Men dette afhænger af logikken i procedurerne, og det kan være brugbart i dit tilfælde.
Men 1-4 har alle det potentielle problem, at hvis du kun har ét objekt, har du kun én version af det objekt, og det er ofte nyttigt at have forskellige versioner tilgængelige i forskellige DB'er, til test eller bare for forskellige kunder.
5 og 6 er variationer over det samme tema, og jeg synes personligt, at dette er den bedste tilgang, fordi implementering er et problem, du alligevel skal løse, så du kan lige så godt gøre det og sørge for, at du har viden, værktøjer og processer på plads at være i stand til at implementere kode rent og hurtigt til enhver database på en kontrolleret, automatiseret måde.