Nuestro grupo especializado pasados varios días de investigación y de recopilar de información, hemos dado con la solución, nuestro deseo es que todo este artículo sea de utilidad en tu plan.
Solución:
Puede aprovechar las variables de secuencias de comandos de sqlcmd. Esos se pueden usar en el archivo de script y están marcados con $()
. Al igual que,
-- Sql script file
use $(db);
select someting from somewhere;
al llamar sqlcmd
utilizar el -v
parámetro para asignar variables. Al igual que,
sqlcmd -S serverinstance -E -v db ="MyDatabase" -i s.sql
Editar
Tenga en cuenta la sintaxis de Sql al establecer variables. Considere el siguiente guión:
DECLARE @dbName varchar(255)
SET @dbName = $(db)
select 'val' = @dbName
Tal como se pasó al servidor Sql, parece que sí (Profiler ayuda aquí):
use master;
DECLARE @dbName varchar(255)
SET @dbName = foo
select 'val' = @dbName
Esto es, obviamente, una sintaxis inválida, ya que SET @dbName = foo
no tendrá mucho sentido. El valor debe estar entre comillas simples así,
sqlcmd -S serverinstance -E -v db ="'foo'" -i s.sql
En caso de que alguien más necesite hacer esto… aquí hay un ejemplo de trabajo.
Guión de PowerShell:
sqlcmd -S uk-ldn-dt270 -U sa -P 1NetNasdf£! -v db = "'DatabaseNameHere'" -i $scriptFile -b | Tee-Object -filepath $sqlLog
Tenga en cuenta el interruptor -v para asignar las variables
Y aquí está el MS SQL:
USE MASTER
GO
if db_id($(db)) is null
BEGIN
EXEC('
RESTORE DATABASE ' + $(db) + '
FROM DISK = ''D:DB BackupEmptyLiveV5.bak''
WITH MOVE ''LiveV5_Data'' TO ''C:Program Files (x86)Microsoft SQL ServerMSSQL11.MSSQLSERVERMSSQLDATALiveV5_' + $(db) + '.MDF'',
MOVE ''LiveV5_Log'' To ''C:Program Files (x86)Microsoft SQL ServerMSSQL11.MSSQLSERVERMSSQLDATALiveV5_' + $(db) + '_log.LDF'', REPLACE,
STATS =10')
END
Nota: No es necesario que asigne la variable de secuencias de comandos a una variable SQL normal como esta.
SET @dbName = $(db)
puedes usarlo en tu código sql. – Codificación feliz.