2010-04-01 187 views
1

我有简单的SSIS包,其中的错误事件处理程序我创建发送电子邮件任务发送错误的详细信息。但是我收到了多个电子邮件,只有一个错误。我找到了关于所有电子邮件的方法,但它们都在vb脚本中,而我的SQL服务器是64位,这又需要进行二进制编译的修补程序安装。 所以我需要任何其他选项。尽管我可以发送第一封错误邮件并忽略其他邮件,但对我来说还是很好的。 任何建议将不胜感激。SSIS发送错误时发送电子邮件发送多个错误

回答

2

我找到了满足我发送第一个错误而忽略休息的解决方案。

用于循环容器,声明的变量计数值为0,并在for循环容器中设置条件计数< 1;计数=计数+ 1

+0

我也使用过这种技术。 – 2010-04-02 15:25:36

9

您得到多个错误的原因与事件冒泡有关。如果在父包级别有一个事件处理程序,并且它具有(例如数据流任务)和数据流中的OLEDB Command组件失败,那么该对象将抛出错误并冒起来事件处理器。然后,因为组件发生故障,数据流任务报告一个错误,并且它触发事件处理程序。然后,因为数据流任务失败,程序包将失败并发送到事件处理程序。过去我曾经处理过一些代码,但现在我无法到达那台机器。我将在今天晚些时候用完整答案更新这个问题,但它必须根据System :: PackageGUID变量检查System :: SourceID变量,并且只在错误处理程序相同时运行错误处理程序的邮件部分。 System :: SourceID是详细说明哪个对象抛出错误的变量,所以这将限制错误报告到那些冒泡到包级别的错误(即那些将会使整个任务失败的错误)。

@Rajiv Varma我有一个脚本任务(其中没有任何代码(基本上是无操作))和一个发送邮件任务。脚本任务和发送邮件我我们的约束作为条件之间(我设定的评估操作:言论和表达的价值

@[System::SourceID]== @[System::PackageID] 

在此进行测试,看是否错误的来源是主要的包对象,然后我使用发送邮件任务发送我的错误信息

为什么这样工作的:如果我有对象的层次

主要包 - 循环任务 - 数据流任务

如果数据。流任务失败,事件i被抛出。事件抛出后,它会冒泡到下一级,并且循环任务将引发相同的错误。在这个事件之后,将它抛到主包层并再次抛出相同的错误。这就是为什么@Pramodtech首先遇到了问题,每个级别都会再次触发相同的错误消息。我在这里有效地做的是忽略任何不在主包级别的错误。所以我不会发送任何消息,直到消息冒泡到顶层。希望这可以帮助。

+0

感谢William的解释。 – pramodtech 2010-04-02 10:03:09

+0

威廉,你有没有能够再次得到这个?我面临同样的情况,我想看看你的解决方案。我试图比较这些变量,但不知道如何完全实现它。 – rvphx 2012-07-17 16:15:41

+0

美丽的解决方案威廉!我喜欢它的简单性。 – rvphx 2012-07-17 22:11:16

0

一种方法发送包含所有错误信息的概要的单一邮件是:

  1. 创建一个字符串变量来存储错误描述概要。
  2. 在onerror事件处理程序中,使用表达式任务以存储如下面的错误描述:

@ [用户:: ErrorDescSummary] = @ [用户:: ErrorDescSummary] + @ [系统:: ErrorDescription中]

  • 对你的包的末尾添加发送电子邮件的任务,使用优先约束编辑器来设定评估操作来“表达”和检查
  • @ [User :: ErrorDescSummary]!=“”

    如果变量不为空,我们将发送带有完整错误摘要的错误电子邮件。

    +0

    我的答案可能不会回答原来的问题,但可能有助于处理多个电子邮件方案。 – 2017-08-09 13:27:15