SSIS发送错误时发送多个错误的电子邮件

时间:2010-04-01 12:57:22

标签: ssis

我有简单的SSIS包,其中我创建了On Error事件处理程序发送电子邮件任务以发送错误详细信息。但我收到多封电子邮件,一个错误。我找到了联系所有电子邮件的方法,但它们是vb脚本,我的SQL服务器是64位,这反过来需要修补程序安装二进制编译。 所以我需要任何替代选择。即使我可以发送第一封错误电子邮件而忽略其他错误,我也没关系。 任何建议将不胜感激。

5 个答案:

答案 0 :(得分:11)

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

@Rajiv Varma

在我的事件处理程序(在程序包级别)中,我有一个脚本任务(它后面没有代码(基本上是无操作))和发送邮件任务。在脚本任务和发送邮件之间我把约束作为条件(我设置了评估操作:表达式和表达式到值

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

测试以查看错误的来源是否是主包对象然后我使用发送邮件任务发送我的错误消息。

为什么会这样:如果我有一个对象层次结构

主程序包 - 循环任务 - 数据流任务

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

答案 1 :(得分:2)

我找到了符合我发送第一个错误并忽略休息的要求的解决方案。

用于循环容器,声明变量Count,其值为0,并且在for for for container容器中设置条件Count< 1; Count = count + 1。

答案 2 :(得分:0)

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

  1. 创建一个String变量来存储错误描述摘要。
  2. 在OnError事件处理程序中,使用Expression任务存储错误说明,如下所示:
  3. @ [User :: ErrorDescSummary] = @ [User :: ErrorDescSummary] + @ [System :: ErrorDescription]

    1. 在包的末尾,添加发送电子邮件任务,使用优先约束编辑器将评估操作设置为“表达式”并检查
    2. @ [用户:: ErrorDescSummary]!= “”

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

答案 3 :(得分:0)

我找到了符合我发送第一个错误并忽略休息的要求的解决方案。

用于循环容器,声明变量Count,其值为0,并且在for for for container容器中设置条件Count< 1; Count = count + 1。

这不起作用我收到多个错误邮件,其中一个脚本任务发送状态邮件,如作业ID状态启动时间和结束时间总时间。此任务的邮件在包中发生了多少错误

答案 4 :(得分:0)

感谢Ajay Kumar Meda,您的解决方案中的一个小改动可以正常工作:

一种发送包含所有错误消息摘要的邮件的方法是:

  1. 创建一个String变量来存储错误描述摘要。
  2. 在OnError事件处理程序中,使用Expression任务存储错误描述,如下所示:

    @[User::ErrorDescSummary] = @[User::ErrorDescSummary] + @[System::ErrorDescription]
    
  3. 在事件处理程序中转到“任务失败”,然后使用

    添加“邮件任务”
    variable @[User::ErrorDescSummary]