我是 SSIS/SQL 的新手,因此以下命名引用可能不正确,但我希望传达问题的要点
我使用的调度工具在 SQL 2012 中执行部署的 SSIS 包,该工具需要指示 SSIS 包何时失败,然后停止运行任何后续调度作业。
该项目使用 SQL 2012 中的 SSIS 项目部署模型。部署的 SSIS 包然后由第 3 方调度工具调用。在 SSIS 目录中,我们使用 Execute 选项生成 SQL 脚本以传递给调度程序。编辑此脚本以添加参数以确保作业同步运行(即调用者一直等待作业完成)。SQL 脚本从调度工具运行,并且只会在完成后移动到下一个作业。
问题是当 SSIS 包失败时,调度工具没有收到返回代码。如果 SSIS 包失败,它包含一个步骤来捕获和发送带有错误通知的电子邮件,因此我们确实对失败有一个看法。但是,无论作业是否成功完成,调度流程中的任何相关作业也会运行。是否有参数强制将返回码发送到第 3 部分调度工具?
用于执行包的脚本示例:
*Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Extract_Job.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'ETL', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value= 1; -- turn on synchronized execution
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO*
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情
小智 5
在存储过程中使我的同步。使用了以下
EXEC [SSISDB].[catalog].[create_execution]
@package_name = N'FixProductType.dtsx',
@execution_id = @execution_id OUTPUT,
@folder_name = N'BI',
@project_name = N'DataCleaning',
@use32bitruntime = False;
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id,
@object_type = 50,
@parameter_name = N'LOGGING_LEVEL',
@parameter_value = 1;
EXEC [SSISDB].[catalog].[start_execution] @execution_id;
DECLARE @status AS BIGINT = 1;
WHILE(@status = 1 OR @status = 2 OR @status = 5 OR @status= 8)
BEGIN
PRINT @status
PRINT 'waiting 5 seconds for Package to finish'
WAITFOR DELAY '00:00:5';
SET @status = (SELECT [Status] FROM SSISDB.[catalog].[executions]
WHERE execution_id = @execution_id);
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12619 次 |
| 最近记录: |