Estou gerando um script para migrar automaticamente as alterações de vários bancos de dados de desenvolvimento para teste / produção. Basicamente, ele pega um monte de scripts de mudança e os mescla em um único script, envolvendo cada script em uma IF whatever BEGIN ... END
instrução.
No entanto, alguns dos scripts requerem uma GO
instrução para que, por exemplo, o analisador SQL saiba sobre uma nova coluna após sua criação.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
No entanto, depois de embrulhar isso em um IF
bloco:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Falha porque estou enviando um BEGIN
sem correspondência END
. Porém, se eu remover o GO
ele reclamará novamente de uma coluna desconhecida.
Existe alguma maneira de criar e atualizar a mesma coluna em um único IF
bloco?
GO
estar em uma linha por si só, então você pode pesquisar apenas esse caso, e não todas as ocorrências da palavra GO
. 2) Você sempre pode registrar quais declarações foram concluídas com êxito. Ou você poderia embrulhar tudo em um try / catch e usar seus próprios números de linha usando alguma variável, como @lineNo, que você acompanha e relata o erro. Como você os está gerando automaticamente, fazer alterações como essa deve ser muito fácil. Parece que você simplesmente não quer explorar essa rota, quando penso que há soluções a serem encontradas para todas as suas preocupações.