2010-10-12 34 views
8

¿Hay alguna manera de saber si una variable se define en la línea de comandos usando SQLCMD?Cómo saber si se define una variable (-v) en la línea de comandos (SQLCMD)

Aquí es mi línea de comandos:

 
sqlcmd -vDB="EduC_E100" -i"Z:\SQL Common\Admin\ProdToTest_DB.sql" 

Dentro ProdToTest_DB.sql me gustaría establecer algún tipo de condicional IF para comprobar si no existe la variable y definirlo si no lo hace.

 
IF NOT $(DB) 
:setvar DB "C_Q200" 
END 

Quiero permitir que el script se ejecute desde la línea de comandos y dentro de SSMS.

Gracias de antemano.

Respuesta

12

He utilizado variantes de la siguiente rutina en numerosos scripts dependientes de la línea de comandos. Aquí, "DataPath" es el valor requerido.

DECLARE @Test_SQLCMD varchar(100) 

-- Confirm that SQLCMD values have been set (assume that if 1 is, all are) 
SET @Test_SQLCMD = '$(DataPath)' 

IF reverse(@Test_SQLCMD) = ')htaPataD($' 
    -- SQLCMD variables have not been set, crash and burn! 
    RAISERROR('This script must be called with the required SQLCMD variables!', 20, 1) with log 
+3

Esto es lo peor que he visto en mi vida. No es la solución, sino la necesidad. – FLGMwt

+1

Oh, hay muchas cosas malas aquí y otras cosas peores. –

+0

Esta no es la respuesta a la pregunta. Esto solo comprueba si actualmente está ejecutando el script en modo SQLCMD. – kjbartel

0

Puede lograr lo que quiere con una declaración de captura de prueba. Simplemente acceda a una de sus variables en la prueba, si eso genera un error, defínelas en la captura.

+0

SQL TRY ... CATCH no detecta los errores SQLCMD. El procesador SQLCMD funciona antes de que se ejecuten las instrucciones SQL, por lo que el error se produce de todos modos, antes de que se haya ejecutado TRY ... CATCH. – DaveBoltman

Cuestiones relacionadas