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

Procedimentos armazenados/esquema de banco de dados no controle de origem


Optamos por criar scripts de tudo, e isso inclui todos os procedimentos armazenados e alterações de esquema. Nenhuma ferramenta wysiwyg e nenhum programa de 'sincronização' sofisticado são necessários.

As alterações de esquema são fáceis, tudo o que você precisa fazer é criar e manter um único arquivo para essa versão, incluindo todas as alterações de esquema e dados. Isso se torna seu script de conversão da versão x para x+1. Você pode executá-lo em um backup de produção e integrá-lo em sua 'compilação diária' para verificar se funciona sem erros. Observe que é importante não alterar ou excluir o esquema / carregamento de dados já escrito sql, pois você pode acabar quebrando qualquer sql escrito posteriormente.
-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

Para procedimentos armazenados, optamos por um único arquivo por sproc e ele usa o formulário drop/create. Todos os procedimentos armazenados são recriados na implantação. A desvantagem é que, se uma alteração foi feita fora do controle do código-fonte, a alteração será perdida. Ao mesmo tempo, isso é verdade para qualquer código, mas seu DBA'a precisa estar ciente disso. Isso realmente impede que as pessoas de fora da equipe brinquem com seus procedimentos armazenados, pois suas alterações são perdidas em uma atualização.

Usando o Sql Server, a sintaxe fica assim:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO  

A única coisa que resta a fazer é escrever um programa utilitário que reúna todos os arquivos individuais e crie um novo arquivo com todo o conjunto de atualizações (como um único script). Faça isso adicionando primeiro as alterações de esquema e, em seguida, recorrendo à estrutura de diretórios e incluindo todos os arquivos de procedimento armazenado.

Como vantagem de criar scripts de tudo, você se tornará muito melhor em ler e escrever SQL. Você também pode tornar todo esse processo mais elaborado, mas esse é o formato básico de como controlar todo o sql sem nenhum software especial.

Adendo:Rick está correto que você perderá permissões em procedimentos armazenados com DROP/CREATE, então você pode precisar escrever outro script para reativar permissões específicas. Este script de permissão seria o último a ser executado. Nossa experiência encontrou mais problemas com a semântica DROP/CREATE dos versos ALTER. YMMV