У меня есть скрипт powershell, который собирает кучу файлов sql и выполняет их на сервере. Все работало нормально, пока я не начал работать со сценариями для удаления и воссоздания заданий.
Часть сценария sql, которая продолжает выдавать ошибку:
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'DatabaseIntegrityCheck - SYSTEM_DATABASES',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'CmdExec',
@command=N'sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d DBAdmin -Q "EXECUTE [ola].[DatabaseIntegrityCheck] @Databases = ''SYSTEM_DATABASES, -tempdb'', @LogToTable = ''Y''" -b',
@flags=0
и ошибка:
Переменная сценария 'SRVR' не определена
Это оставляет меня верить, что ей не нравится эта конкретная часть:
@command=N'sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d DBAdmin -Q "EXECUTE [ola].[DatabaseIntegrityCheck] @Databases = ''SYSTEM_DATABASES, -tempdb'', @LogToTable = ''Y''" -b',
Интересно, что если я скопирую и вставлю сценарий sql в SSMS и выполню его, он будет работать просто отлично.
Почему я получаю эту ошибку только при выполнении из Powershell?
PowerShell, который запускает SQL
try
{
Invoke-Sqlcmd -ServerInstance $ServerName `
-Database DBAdmin `
-InputFile $f.FullName `
-QueryTimeout 30 `
-ErrorAction Stop
}
catch
{
Write-Host "File:" $f.FullName
Write-Error $_.Exception.Message
}