Essa pergunta já foi feita várias vezes no SO, mas, curiosamente, parece não haver consenso sobre a melhor resposta. Então aqui está um resumo das principais opções que várias pessoas sugeriram (sem ordem especial):
- Coloque-o no banco de dados mestre com um
sp_
prefixo para que o SQL Server o procure primeiro - Coloque-o no banco de dados do modelo, para que seja adicionado automaticamente a todos os novos bancos de dados
- Crie um banco de dados apenas para procedimentos 'globais' (e outros objetos) e chame-os usando nomenclatura de três partes
- Como 3, mas crie sinônimos em outros bancos de dados para não precisar da nomenclatura de três partes
- Use ferramentas comerciais ou autodesenvolvidas para gerenciar a implantação em vários bancos de dados
- Como 5, mas implante em um banco de dados e, em seguida,
diff
os bancos de dados e aplique o script diff para implantar em outros bancos de dados
Na minha opinião, 1 não é inicial porque a Microsoft diz explicitamente você não deve criar objetos no banco de dados mestre. 2 parece bom, mas na prática os bancos de dados são restaurados ou copiados com mais frequência do que criados do zero (YMMV), portanto, o uso do modelo não é confiável.
3 e 4 são bons para tabelas e exibições, mas o contexto de execução pode ser um problema para procedimentos e funções armazenados. Mas isso depende da lógica dos procedimentos e pode ser viável no seu caso.
Mas todos os 1-4 têm o problema potencial de que, se você tiver apenas um objeto, terá apenas uma versão desse objeto, e geralmente é útil ter versões diferentes disponíveis em diferentes bancos de dados, para teste ou apenas para clientes diferentes.
5 e 6 são variações do mesmo tema e, pessoalmente, acho que essa é a melhor abordagem, porque a implantação é um problema que você precisa resolver de qualquer maneira, então é melhor fazê-lo e garantir que você tenha o conhecimento, as ferramentas e os processos em vigor. para poder implantar código de forma limpa e rápida em qualquer banco de dados de maneira controlada e automatizada.