2012-06-14 44 views
1

我GOOGLE了一下,认为我已经尝试了几乎所有我见过的建议,但我似乎无法得到这个工作方式我想。我确信SSIS可以做到这一点。我想SSIS陷阱错误,分支,然后成功退出

我有了4个任务的SSIS包,他们为了执行:任务A,然后是B,那么C.第四届任务DI正在使用作为终点,如果B出现故障......更多的是在分钟。

任务A做一些无关的工作。我将它包括在内,因为在包开始时有处理,如果任何一个失败,那么我希望包失败 - 只是SSIS默认值,如果任务A失败,退出包,返回码为1。

B是一个平面文件源的DFT,它的数据传输给在步骤C. B时处理是我的问题的症结所在,因为我要处理的任务B不同于其余的错误。平面文件源不存在或被破坏并不罕见,我想捕获/陷阱但不会导致整个程序包失败。若B确实有错误,虽然,我不想处理任务C.

Ç处理我在DFT B被输送时B没有错误的数据。

我用一个“OnError”事件处理程序捕获DFT-B中的错误,该事件处理程序执行发送电子邮件的SQL任务。然后,我使用“完成时”预置约束将控制流转移到端点 - 任务D(D不做任何事情,它只是一个虚拟端点,我部分用于调试,部分是为了给事件处理程序某处“去” - 我不确定D甚至是必需的)。

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

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

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

帮助!谢谢!

回答

0

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

Conditional Flow

要获得关于过渡线路的不同情况,只是你要编辑的行双击。红线表示控制流程,在以前的任务失败的情况下

编辑:我相信我误读了这个问题!从我所得到的,你已经可以按照预期控制流量。您的问题与退出码一起提供。您是否尝试过在事件处理程序屏幕中将propagate变量设置为false?

检查它下面的链接了解更多信息: http://simonworth.wordpress.com/2009/11/11/ssis-event-handler-variables-propagate/

+0

太感谢你了,我也终于找到了答案,你是对的,我有控制流量是否正确。 –

+0

Ack。我还在挣扎。我确实在测试包中获得了期望的行为(感谢我在stackoverflow上找到的一些链接,这导致了另一个站点,到另一个站点 - 最终发生了一些工作!)。但是现在我试图重现生产包中的逻辑(从零开始构建解决方案),它不起作用!所以有一个非常具体的设置组合。当我知道它的时候,我会重新发布,但是我赞成帮助我和本网站获得其他帮助。至少我已经让它工作了一次,其余的由我决定! –

+0

你的链接最终是答案。我仍然有问题,但他们最终还是蠢蠢欲动。所以......赞扬你!然而,我不能给你一个“拇指”(箭头?)来标记你回答的问题 - 它说我没有足够的代表这样做! –