我正在使用项目部署。我有几个项目参数。我的软件包仅使用项目级参数,而不使用软件包级参数。我已经以编程方式部署了我的项目并设置了环境参考:
我从SQL Agent作业调用每个程序包。运行包时,我无法将环境变量链接到该包。我已成功将项目链接到环境:
但是现在当我运行代理作业时,它会失败。当我查看SSISDB报告时,它说“创建了执行”,但没有显示任何变量。
实际上我是否必须显式地将每个包中的每个变量都链接到环境变量?为什么还要麻烦按环境分组?
我已经创建了这样的环境参考(sql cmd):
EXEC [SSISDB].[catalog].[create_environment_reference] @environment_name='$(ChooseEnvironment)', @reference_id=@reference_id OUTPUT, @project_name='$(ProjectName)', @folder_name='$(folderName)', @reference_type=R
EXEC SSISDB.catalog.set_object_parameter_value @parameter_name=N'EmailFrom', @parameter_value='EmailFrom', @project_name=$(ProjectName), @object_type=20, @folder_name=$(FolderName), @value_type=N'R'
其他信息:我创建了一个sql代理作业,该作业使用以下作业步骤调用每个软件包:
set @cmd = N'/ISSERVER "\"\SSISDB\CHAT\SSISPackages\Chat_Load_RMS_InputFiles.dtsx\"" /SERVER "\"' + @TargetDBServer + '\"" /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,
@step_name=N'PACKAGE: Chat_Load_RMS_InputFiles.dtsx',
@step_id=1,
@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'SSIS',
@command=@cmd,
@database_name=N'master',
@flags=0
是否需要向SSIS @cmd变量添加引用ID?另外,如果我在工作中解决此问题,是否可以删除上面的代码以将每个项目级变量设置为环境,还是仍然需要?为了保持清洁,我应该只能说:这个项目使用这种环境。做完了否则,这几乎就像使用程序包级别的变量以及那些需要的修补程序。
答案 0 :(得分:1)
如果在SQL Agent步骤中将软件包作为“直接” SSIS步骤运行,则必须在步骤配置对话框的“软件包配置”选项卡中选择环境。
如果使用TSQL脚本运行它,则在调用catalog.create_execution
时需要提供参考ID:
DECLARE
@reference_id bigint,
@FullPackageName NVARCHAR(100);
SELECT @reference_id = reference_id
FROM [$(SSISDB)].catalog.environment_references er
INNER JOIN [$(SSISDB)].catalog.projects AS p
ON p.project_id = er.project_id
INNER JOIN [$(SSISDB)].catalog.folders AS f
ON f.folder_id = p.folder_id
WHERE er.environment_folder_name IS NULL
AND er.environment_name = @EnvironmentName
AND p.name = @ProjectName
AND f.name = @FolderName;
IF @@ROWCOUNT = 0
BEGIN
DECLARE
@msg NVARCHAR(100);
SET @msg = N'Could not find a reference for a local (.) ''' + @EnvironmentName + N''' environment.';
THROW 50000, @msg, 1;
END;
SET @FullPackageName = @PackageName + N'.dtsx';
EXEC [$(SSISDB)].catalog.create_execution
@package_name = @FullPackageName,
@execution_id = @execution_id OUTPUT,
@folder_name = @FolderName,
@project_name = @ProjectName,
@use32bitruntime = False,
@reference_id = @reference_id;