2010-08-09 11 views
12

Estamos usando Visual Studio Database Professional y hace un uso intensivo de las variables SQLCMD para diferenciar entre entornos durante la implementación.¿Es posible forzar automáticamente el modo SQLCMD en el script?

Sé que hay varias directivas disponibles para establecer el contexto (como: conectar para el nombre del servidor). ¿Hay alguna manera dentro del script para forzar el modo SQLCMD para su ejecución? Parte de nuestro proceso de implementación consiste en que los DBA examinen y ejecuten los scripts y sería una buena red de seguridad (para que no tenga que recordarles que configuren su modo de ejecución en SQLCMD).

+0

+1 Buscando una solución similar. ¿Alguna vez descubrió cómo hacerlo? –

+0

No, aún esperando. Dudo en comenzar una recompensa. –

Respuesta

4

No es una solución, pero como solución alternativa, puede insertar su secuencia de comandos con alguna advertencia. This post me inspiró a este código:

SET NOEXEC OFF; -- previous execution may have toggled it 
:setvar IsSqlCmdEnabled "True" 
GO 
IF ('$(IsSqlCmdEnabled)' = '$' + '(IsSqlCmdEnabled)') 
BEGIN 
    PRINT('Use SqlCmd-mode!!'); 
    SET NOEXEC ON; 
    -- RAISERROR ('This script must be run in SQLCMD mode.', 20, 1) WITH LOG 
END 
ELSE 
BEGIN 
    PRINT('Using SqlCmd-mode') 
    -- insert the code you really want to execute: 
    -- ... 
END 
SET NOEXEC OFF; -- do not disable next execution in this session 
+0

Sé que es tarde, pero para cualquier otra persona que encuentre esto en el futuro: los scripts de publicación VS2010 hacen básicamente esto (establecen una var especial '__IsSqlCmdEnabled' luego verifican su valor inmediatamente) pero también' SET NOEXEC ON' como un agregado medida de seguridad para evitar que se ejecute cualquier otra cosa en el script. –

+0

@Micheal, gracias por la sugerencia, agregué el 'NOEXEC'. (No probado, no SqlServer en este momento, pero parece lo suficientemente simple.) –

+0

Solo funciona en la primera ejecución – Paul

0

Esto no parece posible. Incluso revisé el modo de proyecto SSMS.

Sin embargo, si crea un proyecto de base de datos en BIDS, los scripts de despliegue previo & pre-deployment se ejecutan en modo SQLCMD de forma predeterminada.

Sé que esa no es la respuesta que desea, pero es lo mejor que puedo ofrecerle sin recurrir a la creación de un plugin SSMS personalizado que lo haga por usted basado en algún texto en el archivo de script.

Cuestiones relacionadas