Переменная сценария 'SRVR' не определена - PullRequest
0 голосов
/ 24 июня 2019

У меня есть скрипт 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
        }

1 Ответ

2 голосов
/ 24 июня 2019

Добавьте переключатель DisableVariables в Invoke-Sqlcmd, чтобы переменные сценариев агента SQL не интерпретировались как переменные SQLCMD:

try
    {
        Invoke-Sqlcmd  -ServerInstance $ServerName `
            -Database DBAdmin `
            -InputFile  $f.FullName `
            -QueryTimeout 30 `
            -ErrorAction Stop `
            -DisableVariables
    }
    catch
    {
        Write-Host "File:" $f.FullName 
        Write-Error $_.Exception.Message
    }
...