Toda vez que algo falha na publicação, supondo que ele passe na geração de visualização , a linha de erro e a amostra de script executado são completamente inúteis para me ajudar a rastrear a origem do erro, pois o número da linha é relativo à última GO
instrução e o script executado não nem sempre aparecem no script de publicação.
Neste caso, ele falha com este erro:
O script executado não existe no script de publicação:
E é aqui que ele navega no script de publicação ao clicar duas vezes na mensagem de erro:
Normalmente, consigo rastreá-lo com base nas informações de erro, mas desta vez estou perdido porque as únicas palavras-chave relevantes que consigo pensar são tão comuns que parece impossível.
Parece que o registro é hackish e os erros às vezes vêm antes do script pós-implantação (por exemplo, gatilhos de tabela executando em dados incompletos, pois as configurações de publicação incluem apenas uma opção para desabilitar gatilhos DDL ).
Tentei executar o SQL Server Profiler durante a publicação, mas essa ferramenta omite informações de depuração ainda mais cruciais (e fica sobrecarregada com meu grande projeto de banco de dados). Talvez outro motivo para atualizar para obter o Extended Events Profiler?
(Verifiquei que esta declaração não era a culpada)
Eu usaria
RAISERROR WITH NOWAIT
no script pós-implantação no início de cada bloco que está sendo executado. Dessa forma, você poderá ver até onde a implantação chegou antes de chegar ao ponto de falha e, esperançosamente, tê-la reduzido a um script específico.Como costumo estruturar meus projetos SSDT é que tenho um único script pós-implantação e, em seguida, incluo outros arquivos usando
:r
e separe-os comGO
's. Isso me deixa com o local ideal para inserir oRAISERRORS
para pegar o progresso. Alternativamente, você deve colar oRAISERROR
no topo de cada arquivo incluído.https://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-2017 ponto chave no link sendo:
Desculpe - isso está assumindo que o erro está dentro do seu script de pós-implantação. Depois de reler, percebi que seu erro parece ser anterior a isso.