2010-04-21 19 views
96

Estoy tratando de crear algunas variables de proceso en T-SQL de la siguiente manera:SQL Server ': setvar' Error

/* 
    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, me sale un error que indica 'sintaxis incorrecta cerca': '. ¿Qué estoy haciendo mal?

Respuesta

175

El: setvar solo funciona en modo de comando SQL, por lo que posiblemente se encuentre 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".

+16

Este es también un problema cuando se utiliza Visual Studio de: Datos> Comparación de esquemas de servicios públicos. 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 tratar de importar/pegar el script de cambio resultante en SSMS, entonces como arriba fallará. Obviamente, esto también podría ser un problema si incluyese el script de cambio db en una implementación integrada. Por lo tanto, debe activar el modo de comando de SQL antes de ejecutar el script, ya sea a través del menú como se indicó anteriormente o asegurarse de que su script de instalación personalizado lo haga antes de ejecutarlo. – rism

+3

En Visual Studio (2013): menú SQL-> Configuración de ejecución-> Modo SQLCMD – larsts

+0

Me estoy enfrentando a este problema al tratar de usar un script generado de comparación de scema 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 ejecutenonquery(). Necesitaré encontrar una forma de ejecutar esto a través del modo SQLCMD o modificar el script reemplazando todas las variables para empezar. – Scott

1

intentar sustituir :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

con:

USE [MesProduction_Preloaded_KLM_MesSap] 
GO 
+0

¿No ayuda la evaluación de la variable en el resto del script? $ (Nombre de la base de datos). [Dbo]. [Lo que sea] – CRice

1

Solamente es necesario activar el modo de sqlcmd en SQL Server Management Studio como se describe en la siguiente imagen.

enter image description here