vez varios scripts script ejemplos ejecutar consola comandos sql-server sql-server-2005 sqlcmd

sql-server - varios - sqlcmd linux



SQLCMD, variables de lĂ­nea de comandos y script: setvar (5)

Considera usar el comando :r filename para tus setvars.

Al ser un archivo separado, puede usar el mismo archivo a través de sus regiones de implementación, cada una de las cuales contiene sus propios contenidos específicos de la región.

:r path/sqlConfig.sql

Al ejecutar SQLCMD.exe y proporcionar argumentos de la línea de comandos para las variables de secuencias de comandos, espero que los valores proporcionados en la línea de comandos anulen los definidos en el archivo de secuencia de comandos SQL.

p.ej

Dado el siguiente script SQL:

:setvar XXX "SQL script" print ''$(XXX)''

Y la línea de comando:

sqlcmd.exe -S <Server> -d <Database> -E -b -i <Script> -v XXX="Batch script"

Espero que la salida sea:

Script de lote

Sin embargo la salida es:

Script SQL

¿Es esta la intención o deben :setvar sentencias :setvar en el script SQL?

Proporcioné las :setvar en el script, por lo que puedo editar / probar el script en SQL Management Studio con el modo SQLCMD, pero ejecutar los scripts desde la línea de comandos en mis entornos de prueba y producción.


Creo que es intencional. Actualmente, la sentencia setvar en el script .sql tiene la mayor prioridad.



Intente editar su archivo sqlproj y agregue la siguiente propiedad

<CommentOutSetVarDeclarations>true</CommentOutSetVarDeclarations>

El archivo sql generado tendrá comentar setvars y luego puede usar la línea de comando para establecer el valor real.


También estaba luchando con esto, pero recuerdo haber notado que msdeploy.exe también podía ejecutar scripts de SQL con variables. Pero, por alguna extraña razón, msdeploy.exe es capaz de pasar variables desde la línea de comandos con los valores de las variables de la línea de comandos que tienen prioridad sobre los valores definidos en el propio script.

Un ejemplo: tengo un script sql (NavDbSecurity.sql) que tiene tres parámetros definidos:

:setvar loginName "testLoginName" :setvar databaseName "testDatabaseName" :setvar NavCompanyName "blablabla"

Cuando ejecuto el siguiente script de msdeploy, los valores de los parámetros que paso a través de la línea de comandos tienen prioridad sobre los valores definidos en el archivo de script (no importa el usuario sa sin contraseña;)):

msdeploy.exe -verb:sync -source:dbfullsql="c:/NavDbSecurity.sql" -dest:dbfullsql="data source=./sqlexpress;initial catalog=data base;User Id=sa;Password=;",transacted=False -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=databaseName,value="[data base]" -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=loginName,value="domain/user" -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=NavCompanyName,value="testCompany"