Sequence容器Propagate设为false时,如何将SSIS包最终状态设为失败
实现方案
步骤1:新增包级错误标记变量
打开SSIS包的变量面板,创建包作用域的布尔型变量,命名为HasFileProcessError,初始值设置为False。
步骤2:修改Sequence Container的On Error事件逻辑
保留原有邮件发送逻辑,在事件处理流程末尾新增赋值操作:
- 若使用SSIS 2012及以上版本,添加表达式任务,设置表达式为:
@[User::HasFileProcessError] = True - 若使用更低版本SSIS,替换为脚本任务:
- 在脚本任务的读写变量列表中添加
User::HasFileProcessError - 脚本核心逻辑:
Dts.Variables["User::HasFileProcessError"].Value = true; Dts.TaskResult = (int)ScriptResults.Success;
- 在脚本任务的读写变量列表中添加
步骤3:For Each Loop执行完成后新增状态校验
在For Each Loop容器下游添加校验脚本任务,连接优先级设置为「成功」,确保所有文件处理完成后才执行校验:
- 脚本任务的只读变量列表添加
User::HasFileProcessError - 脚本核心逻辑:
if ((bool)Dts.Variables["User::HasFileProcessError"].Value) { // 主动抛出错误,将包最终状态标记为失败 Dts.Events.FireError(0, "全局错误校验", "存在至少1个文件处理失败", "", 0); Dts.TaskResult = (int)ScriptResults.Failure; } else { Dts.TaskResult = (int)ScriptResults.Success; }
注意:原有
Propagate = False的配置无需修改,单文件出错后继续处理下一个文件的逻辑不受影响。
内容的提问来源于stack exchange,提问作者user3044602
相关产品推荐
相关产品推荐

