【发布时间】:2012-04-25 15:33:45
【问题描述】:
我有一个 SSIS 包,我在其中设置了 OnError 和 OnPostExecute 事件处理程序。 Package 是一个简单的循环容器,处理程序 OnPostExecute 工作正常。
但是 OnError 实际上并没有工作。我在 Loop 内的任务中添加了一些错误代码,只是为了测试 OnError 处理程序并且它没有激活。 OnPostExecute 处理程序在循环内的非常进程之后才起作用。
另一方面,我尝试自己执行 OnError 任务,它确实有效。因此,发生错误时不会激活它。
一些信息。我已将循环内的每个任务的 Propagate 系统变量设置为 FALSE,因为我不希望程序包停止。 (也许这与它有关) OnError 处理程序处于 包 级别。
关于当进程发现错误时不执行 OnError 的任何想法? 谢谢
【问题讨论】:
-
问题1:当传播为真时它是否有效?问题2:你是如何运行包的? f5?
-
1.不,它不起作用,不同之处在于程序在第一次错误后停止。但是 OnError 没有被激活。 2.我用鼠标播放按钮运行它,我也试过用F5。谢谢
-
您的问题解决了吗?使用 SQL Server 的默认日志提供程序,我无法在我的 dbo.sysssislog 表上获得任何 OnError 事件,即使我在“执行结果”选项卡中调试时看到错误也是如此。我的目标是避免自定义 OnError 事件处理程序。
-
我没有说实话。谢天谢地,我能够继续前进,因为循环内的错误并不重要。我很确定它与包本身有关,因为当出现问题时,其他包确实激活了 OnError 事件。是的,由于公司原因,我总是使用自定义事件处理程序。
-
经过一番挖掘,我解决了我的问题。我在我的连接管理器上使用 RetainSameConnection=true 属性(我正在管理包内的事务),并且我在 Logging 和包任务之间共享它。当我禁用 RetainSameConnection 时,我获得了预期的 OnError 事件。解决方案是专门为 Logging 创建另一个连接管理器。