1

我已经四处搜索,并认为我已经尝试了几乎所有我看到的建议,但我似乎无法让它以我想要的方式工作。我确信 SSIS 可以做到这一点。

我有一个包含 4 个任务的 SSIS 包,它们按顺序执行:任务 A,然后是 B,然后是 C。如果 B 失败,DI 将使用第 4 个任务作为终点……稍后会详细介绍。

任务 A 做了一些不相关的工作。我包含它是因为在包的开头有处理,如果其中任何一个失败,那么我希望包失败 - 只是 SSIS 默认值,如果任务 A 失败,则以 1 的返回码退出包。

B 是具有平面文件源的 DFT,它传输要在步骤 C 中处理的数据。 B 是我问题的症结所在,因为我想以不同于其他方式处理任务 B 中的错误。平面文件源不存在或损坏并不少见,我想捕获/捕获它但不会导致整个包失败。如果 B 确实有错误,我不想处理任务 C。

当B没有错误时,C处理我在DFT B中传输的数据。

我使用“OnError”事件处理程序捕获 DFT-B 中的错误,该事件处理程序执行发送电子邮件的 SQL 任务。然后,我使用“完成时”优先约束将控制流转移到端点 - 任务 D。(D 什么都不做,它只是一个虚拟端点,我部分用于调试,部分用于在某处提供事件处理程序“去”——我不确定是否需要 D)。

无论如何,当我运行包并在 B 中触发错误时,我的包执行事件处理程序(发送电子邮件就好了),它甚至继续执行任务“D”,在调试器中,“D”以成功结束(显示绿色)。问题是,我的包失败,退出代码为“1”。

我试过搞乱各种事情...... ForceExecutionValue/ForceExecutionResult/MaximumErrorcount。现在我有一个包实际上甚至没有继续我的“任务 D”,我不确定我是如何到达那里的(但异常处理程序 SQL 忠实地向我发送了一封电子邮件!)。

我不希望退出代码为 1!我要0!

帮助!谢谢!

4

1 回答 1

0

你有没有尝试过这样的事情:

条件流

要获得过渡线上的不同条件,只需双击您要编辑的线。红线表示前一个任务失败时的控制流

编辑:我相信我误读了这个问题!据我所知,您已经可以按预期控制流程。您的问题与退出代码有关。您是否尝试propagate在事件处理程序屏幕中将变量设置为 false?

检查以下链接以获取更多信息: http ://simonworth.wordpress.com/2009/11/11/ssis-event-handler-variables-propagate/

于 2012-06-14T16:25:10.447 回答