Error de SQL Server ': setvar'

123

Estoy tratando de crear algunas variables de script en T-SQL de la siguiente manera:

    /*
    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"

Sin embargo, cuando ejecuto esto, aparece un error que dice 'Sintaxis incorrecta cerca de': '. ¿Qué estoy haciendo mal?

Randy Minder
fuente

Respuestas:

237

El: setvar solo funciona en el modo de comando SQL, por lo que posiblemente esté dentro de la ejecución normal de SQL en el estudio de administración y no haya cambiado al modo de comando.

Esto se puede hacer a través de la interfaz de usuario en SQL Server Management Studio yendo al menú "Consulta" y seleccionando "Modo SQLCMD".

Andrés
fuente
19
Esto también es un problema cuando se usa la utilidad Visual Studio: Data> Schema Compare. Si ejecuta el script de cambio resultante desde la utilidad, está bien, pero si decide exportar / copiar el script de cambio después de hacer una comparación y luego intenta importar / pegar el script de cambio resultante en SSMS, entonces, como se indica arriba, fallará. Obviamente, esto también podría ser un problema si incluyera el script de cambio de db en una implementación agrupada. Por lo tanto, debe activar el modo de comando SQL antes de ejecutar el script, ya sea a través del menú que se muestra arriba o asegurarse de que su script de instalación personalizado lo haga antes de que se ejecute.
Rism
66
En Visual Studio (2013): menú SQL-> Configuración de ejecución-> modo
SQLCMD
Me encuentro con este problema al intentar utilizar un script generado por scema compare para construir mi base de datos desde mi aplicación en el primer inicio después de la instalación, pasando el script a un executetenonquery (). Necesitaré encontrar una manera de ejecutar esto a través del modo SQLCMD o hackear el script reemplazando todas las variables para empezar.
Scott
Solo un FYI: utilicé el script de creación generado al publicar mi proyecto de base de datos y luego eliminé todas las referencias a las variables a las que se hace referencia usando el setvar. Codifiqué el nombre de mi base de datos, por lo que en lugar de CREATE DATABASE [$ DatabaseName] fue simplemente CREATE DATABASE MYDBNAME. Este script ahora funciona para crear mi base de datos a través de executetenonquery () durante mi primer inicio de la aplicación después de la instalación.
Scott
10

Simplemente habilite el modo sqlcmd en SQL Server Management Studio como se describe en la siguiente imagen.

ingrese la descripción de la imagen aquí

Muhammad Awais
fuente
2

PARA SQL2012:

vaya a: herramientas / opciones / Ejecución de consultas y verifique por defecto, abra nuevas consultas en modo SQLCMD.

Presione el botón Nueva consulta y asegúrese de que las definiciones de las variables estén resaltadas, su secuencia de comandos debería ejecutarse correctamente ahora.

Versión anterior:

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

Terrence Harry Holmes
fuente
Visual Studio también informará errores de sintaxis en su proyecto cuando se abra un archivo .sql que use: setvar. El cambio de Opciones descrito aquí eliminará los errores y evitará el "subrayado rojo ondulado" de la declaración (deberá cerrar y volver a abrir los archivos .sql abiertos para ver el efecto).
BRebey
0

intente reemplazar :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

con:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
fuente
¿No ayuda a evaluar la variable en el resto del script? $ (DatabaseName). [Dbo]. [Lo que sea]
CRice