Por que: r Comando SQLCMD marcado como errado no Script de pós-implantação?

17

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 incorreta:

"SQL80001 sintaxe incorreta ao lado de ':'"

Encontrei sugestões para definir o PDS para criar ação "none". Isso não ajuda, o erro permanece. O que estou perdendo aqui?

Magier
fonte
desculpe, acho que é mais claro "que ação o script está definido para que tenha o": r "dentro dele?" :)
Ed Elliott

Respostas:

15

Supondo que o erro ocorra durante o processo de compilação e que você não tenha nenhum erro de sintaxe real, é uma tarefa simples

:r path\to\file.sql

o erro também ocorre quando o arquivo sendo importado não existe. Por favor, 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ê desejar ver o erro relatado pelo processo de compilação, ative 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 , selecione Editor do Transact-SQL -> , selecione Configurações de execução -> e , finalmente, selecione Modo SQLCMD . Agora, quando você executar o script, ele interpretará corretamente :r, assim como o processo de compilação / publicação.

Além disso, seu PDS (Post Deploy Script) precisa ter sua Ação de Construção definida como PostDeploy . Se estiver definido como Nenhum , será ignorado inteiramente pelo processo de construção do SSDT.

Solomon Rutzky
fonte
4

Erro válido

Isto é porque :r somescript.sql sql não é válido. Você está vendo um erro de sintaxe, que é exatamente o que a mensagem de erro indica.

SQL80001: Sintaxe incorreta perto de ':'.

Modo SQLCMD

O script pós-implantação é executado no modo SQLCMD.

O utilitário sqlcmd permite inserir instruções Transact-SQL, procedimentos do sistema e arquivos de script no prompt de comando, no Query Editor no modo SQLCMD, em um arquivo de script do Windows ou em uma etapa da tarefa do sistema operacional (Cmd.exe) de um SQL Server Trabalho de agente. Este utilitário usa ODBC para executar lotes Transact-SQL.

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, no SSMS e no Visual Studio, você pode "ativar" o Modo SQLCMD.

VS 2017

  • clique com o botão direito do mouse no editor que contém o script sql
  • clique em Configurações de execução
  • clique em Modo SQLCMD
  • Observe que você pode fazer a mesma coisa no menu SQL

SSMS 17, SSMS 18

  • Consulta (item de menu)
  • Modo SQLCMD

Veja também

Seth Flowers
fonte