web-dev-qa-db-ja.com

SQL Serverジョブの作成時にENVREFERENCEを設定する方法

SQL Server 2014(必要な場合)

SSISパッケージとジョブを環境間で移行する場合、/ENVREFERENCEパラメーターを各ジョブステップのコマンドに更新する必要があります。とにかく正しい値を見つけて、この値を使用するようにジョブステップをスクリプト化しますか?.

疑似コード

Query for ENVREFERENCE where Environment name = N'QA' -- how to do this?
EXEC sp_update_jobstep 
    @job_name = N'My Job', 
    @step_id = 30, 
    @command= first part + /ENVREFERENCE= value from query + last part;
1
Timothy Vogel

ステップを適切な環境に関連付けるために、ジョブスクリプトで次のようなコードを使用しました。

--Call SSIS package. Figure out the server and Environment Reference variables
DECLARE @EnvReference   INT = (SELECT TOP 1 EnvironmentReferenceID FROM SSISDB.rpt.Package WHERE PackagePathName = '\SSISDB\Folder\Project\Package.dtsx\');
DECLARE @Command        VARCHAR(2000) = FORMATMESSAGE(N'/ISSERVER "\"\SSISDB\Folder\Project\Package.dtsx\"" /SERVER %s /ENVREFERENCE %i /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E', @@SERVERNAME, @EnvReference);
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Job Name', 
                @step_id=1, 
                @on_success_action=3, 
                @on_fail_action=3, 
                @subsystem=N'SSIS', 
                @command=@Command, 
                @database_name=N'master', 
                @output_file_name=N'E:\Log\Job.log',
                @flags=40;

ちなみに、ビューrpt.Packageは次のとおりです。

SELECT  PackagePathName = FORMATMESSAGE('\SSISDB\%s\%s\%s\', F2.name, PJ.name, PK.name),
    EnvironnmentPathName = FORMATMESSAGE('\SSISDB\%s\%s', F.name, E.name),
    EnvironmentReferenceID = ER.reference_id,
    ProjectFolder = F.name,
    Project = PJ.name,
    Package = PK.name,
    EnvironmentFolder = F2.name,
    Environment = E.name
FROM    catalog.folders AS F
    INNER JOIN catalog.environments AS E ON E.folder_id = F.folder_id
    INNER JOIN catalog.environment_references AS ER ON (ER.reference_type = 'A'
            AND ER.environment_folder_name = F.name
            AND ER.environment_name = E.name)
        OR (ER.reference_type = 'R'
            AND ER.environment_name = E.name)
    INNER JOIN catalog.projects AS PJ ON PJ.project_id = ER.project_id AND PJ.folder_id = F.folder_id
    INNER JOIN catalog.packages AS PK ON PK.project_id = PJ.project_id
    INNER JOIN catalog.folders AS F2 ON F2.folder_id = PJ.folder_id

参照を必ず置き換えてください:フォルダー、プロジェクト、パッケージ、ジョブを独自の文字列に置き換えます。

3