Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Procedimentos armazenados de referência para todos os bancos de dados no servidor


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):
  1. Coloque-o no banco de dados mestre com um sp_ prefixo para que o SQL Server o procure primeiro
  2. Coloque-o no banco de dados do modelo, para que seja adicionado automaticamente a todos os novos bancos de dados
  3. Crie um banco de dados apenas para procedimentos 'globais' (e outros objetos) e chame-os usando nomenclatura de três partes
  4. Como 3, mas crie sinônimos em outros bancos de dados para não precisar da nomenclatura de três partes
  5. Use ferramentas comerciais ou autodesenvolvidas para gerenciar a implantação em vários bancos de dados
  6. 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.