2015-06-24 68 views
0

我正在尝试编写一个将在某些服务器上执行审计的SSIS包。审计完成后,它会向负责服务器的系统管理员发送电子邮件,告诉他们已经执行了审计,并在哪里可以找到审计报告。SSIS foreach循环,继续,但也对失败的迭代执行操作?

我遇到的问题是,当审计因任何原因失败(无法连接到服务器和什么)时,我想向系统管理员发送一封电子邮件,说它失败了。很高兴说出它的失败位置,但如果我必须解决一个简单的“失败”电子邮件,那么也没关系。只要他们知道它没有运行。

因此,我通过添加错误处理程序,其中变量传播设置为false,克服了'失败的foreach循环'继续。

如何获得发送失败电子邮件的任务?我是否必须为foreach循环中的每个任务添加一个“OnError”事件处理程序(29个任务)?还是有一些神奇的“失败的迭代执行此任务”?

谢谢你的时间。

+0

也许使用一个容器来设置只在容器上的OnError事件 – mxix

+0

@mxix这个工作是否也会传播呢? – Aserian

+0

@mxix刚刚测试过,不起作用。问题是继续一个foreach循环,你必须禁用在失败的组件(foreach中的任务)上传播,这会导致foreach实际上成功 - 因此没有错误被捕获,因为“没有任何错误”。 – Aserian

回答

0

因此,在深入搜索之后 - 看起来答案就是简单地对foreach循环中的每个组件执行错误处理。尼斯,因为它允许详细的错误报告(“失败这里”),讨厌,因为它是我的情况下很多组件。

对于任何使用Google稍后: 要失败的任务失败停止foreach循环:

  • 选择失败的任务,并单击“事件处理程序”下一个“参数”到顶部你的包装设计师。

  • 在“事件处理程序:”下拉列表中选择“OnError”(它应该已经是选定的一个),然后点击包设计器中间的蓝色文本'点击此处创建'OnError'事件处理程序可执行'您的组件名''

  • 导航到变量窗格(SSIS - >变量)。

  • 当在变量中单击变量窗格顶部的“网格选项”按钮。

  • 选中'显示系统变量'。点击确定。

  • 向下滚动到'Propogate',将其设置为False。

  • 针对您认为可能会失败的任何组件重复该操作。

处理错误报告

  • 对于已经添加的OnError事件处理程序的每个组件,事件处理程序中的组件在你喜爱的报告,电子邮件,地点错误的方法来报告在数据库中,无论如何。

即使事件处理组件失败,您的foreach循环现在也会继续。当组件失败时,它将执行其各自的事件处理程序中的组件。

希望这有助于任何人在未来寻找。

编辑:请注意,一个失败的组件(如果流程是定向的)将会失败整个迭代。这意味着,如果您即使在发生一次故障时也要执行必要的任务,请不要指挥任务流程。如果您希望单个组件无法在整个迭代中失败(我的情况),那么通过按照优先顺序连接它们来指示任务流。