Já trabalhei algumas vezes com scripts de pós-implantação e sempre usei intuitivamente a ação de compilação "PostDeploy", porque é isso que é. Agora, pela primeira vez, tento seguir as instruções internas do modelo do script para usar a ":r somescript.sql"
sintaxe.
Imediatamente esta linha está sendo marcada como errada:
"Sintaxe SQL80001 incorreta ao lado de ':'"
Encontrei sugestões para definir o PDS para Build Action "none". Isso não ajuda, o erro permanece. O que estou perdendo aqui?
Supondo que o erro ocorra durante o processo de compilação e que você não tenha nenhum erro de sintaxe real, e é um simples
então o erro também ocorre quando o arquivo que está sendo importado não existe. Verifique a localização do arquivo. Se você não forneceu um caminho absoluto, o caminho será relativo à pasta da solução (pelo menos para mim é).
Se, durante o desenvolvimento, você quiser ver o erro que o processo de compilação relata, certifique-se de habilitar o "modo SQLCMD" no editor T-SQL no Visual Studio. Há um botão à direita na barra de botões com um "!" nele que deve permitir isso. Ou você pode ir para o menu SQL , selecionar Transact-SQL Editor -> , selecionar Execution Settings -> e, finalmente, selecionar SQLCMD Mode . Agora, quando você executar o script, ele interpretará corretamente
:r
, assim como faz o processo de compilação/publicação.Além disso, seu Post Deploy Script (PDS) precisa ter sua Build Action definida como PostDeploy . Se estiver definido como Nenhum , será totalmente ignorado pelo processo de construção do SSDT.
Erro válido
Isso ocorre porque
:r somescript.sql
não é um sql válido. Você está vendo um erro de sintaxe, que é exatamente o que a mensagem de erro informa.Modo SQLCMD
O script pós-implantação é executado no modo SQLCMD.
Resolução
Lembre-se de que você pode se conectar a um banco de dados e executar sql no Visual Studio. Você veria esse mesmo erro de sintaxe se abrisse o mesmo script no SSMS. No entanto, tanto no SSMS quanto no Visual Studio, você pode "habilitar" o modo SQLCMD.
vs 2017
SSMS 17, SSMS 18
Veja também