我已经google了一下,认为我已经尝试过我所见过的所有建议,但我似乎无法以我想要的方式工作。我很清楚SSIS可以做到这一点。
我有一个包含4个任务的SSIS包,它们按顺序执行:任务A,然后是B,然后是C.第4个任务DI用作终点,如果B失败...更多关于那一分钟
任务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!
帮助!谢谢!
答案 0 :(得分:0)
你有没有试过这样的事情:
要在过渡线上获得不同的条件,只需双击要编辑的线条即可。红线表示上一个任务失败时的控制流程
编辑:我相信我误解了这个问题!从我得到的,你已经可以按照预期控制流量。您的问题随退出代码一起提供。您是否尝试在事件处理程序屏幕中将propagate
变量设置为false?
检查以下链接以获取更多信息: http://simonworth.wordpress.com/2009/11/11/ssis-event-handler-variables-propagate/