Erro do SQL Server ': setvar'

123

Estou tentando criar algumas variáveis ​​de script no T-SQL da seguinte maneira:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

No entanto, ao executar isso, recebo um erro informando 'Sintaxe incorreta próxima a': '. O que estou fazendo de errado?

Randy Minder
fonte

Respostas:

237

O: setvar funciona apenas no modo de comando SQL, portanto, você pode estar dentro da execução normal do SQL no estúdio de gerenciamento e não mudou para o modo de comando.

Isso pode ser feito através da interface do usuário no SQL Server Management Studio, acessando o menu "Consulta" e selecionando "Modo SQLCMD".

Andrew
fonte
19
Esse também é um problema ao usar o utilitário Visual Studio: Data> Schema Compare. Se você executar o script de alteração resultante a partir do utilitário, tudo bem, mas se você decidir exportar / xcopy o script de alteração após fazer uma comparação e tentar importar / colar o script de alteração resultante no SSMS, como acima, falhará. Obviamente, isso também pode ser um problema se você estiver incluindo o script de alteração de banco de dados em uma implantação em pacote. Portanto, você precisa ativar o modo de comando SQL antes de executar o script pelo menu como acima ou garantir que o script de instalação personalizado faça isso antes de executar.
Rism
6
Em Visual Studio (2013): Execução SQL Menu> Configurações> SQLCMD modo
larsts
Estou enfrentando esse problema ao tentar usar um script gerado por comparação de scema para criar meu banco de dados a partir do meu aplicativo na primeira inicialização após a instalação, passando o script para uma executenonquery (). Precisarei encontrar uma maneira de executar isso via modo SQLCMD ou hackear o script substituindo todas as variáveis ​​para começar.
Scott
Apenas um FYI - usei o script create gerado na publicação do meu projeto de banco de dados e, em seguida, removi todas as referências às variáveis ​​referenciadas usando o setvar. Eu codifiquei o nome do meu banco de dados para que, em vez de CREATE DATABASE [$ DatabaseName], ele fosse simplesmente CREATE DATABASE MYDBNAME. Este script agora trabalha para criar meu banco de dados via executenonquery () durante a primeira inicialização do aplicativo após a instalação.
Scott
10

Basta ativar o modo sqlcmd no SQL Server Management Studio, conforme descrito na imagem a seguir.

insira a descrição da imagem aqui

Muhammad Awais
fonte
2

PARA SQL2012:

acesse: tools / options / Query Execution e, por padrão, abra novas consultas no modo SQLCMD.

Clique no botão Nova consulta e verifique se as definições das variáveis ​​estão realçadas; seu script deve ser executado corretamente agora.

Versões prévias:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/

Terrence Harry Holmes
fonte
O Visual Studio também relatará erros de sintaxe no seu projeto quando um arquivo .sql estiver aberto e use: setvar. A alteração de opções descrita aqui eliminará os erros e evitará o "sublinhado vermelho ondulado" da instrução (você precisará fechar e reabrir todos os arquivos .sql abertos para ver o efeito).
BRebey
0

tente substituir :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

com:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
fonte
Não ajuda na avaliação da variável no restante do script? $ (DatabaseName). [Dbo]. [Whatever]
CRice