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.
Esto parece ser por diseño; alguien ya ha presentado una solicitud de cambio en Connect: http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=382007
La única forma de evitar el problema que puedo ver sería comentar (o eliminar) los comandos :setvar
en la versión.
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"