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 ... ENDinstrução.
No entanto, alguns dos scripts requerem uma GOinstruçã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 IFbloco:
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 BEGINsem correspondência END. Porém, se eu remover o GOele reclamará novamente de uma coluna desconhecida.
Existe alguma maneira de criar e atualizar a mesma coluna em um único IFbloco?
GOestar 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.