我需要一些关于以下问题的帮助:
在foreach循环中,我有一个数据流任务,它从集合文件夹中读取每个文件。如果在处理某个文件时失败,则将该文件复制到错误文件夹(使用名为&#34的文件系统任务;将工作复制到错误")。
我想设置一个发送电子邮件任务,如果在程序包执行期间有任何文件发送到错误文件夹,我会发出警告。我可以在"将工作复制到错误"之后轻松添加此任务。任务,但如果有许多文件使数据流任务失败,我的收件箱将被填满。
相反,我只希望发送邮件任务一次(在foreach循环完成后),只有当"复制工作到错误"任务至少执行了一次。有什么办法可以实现吗?
谢谢,
奥维迪乌
答案 0 :(得分:1)
这是我能想到的一种方式:
@Total
容器外创建一个整数变量ForEach
并将其设置为0. @PerIteration
容器内创建一个整数变量ForEach
。Script Task
作为事件处理程序添加到File System Task
。此任务应按@Total
增加@PerIteration
。SendMail
容器后添加ForEach
任务。在优先约束中,将类型设置为Expression
,并指定条件@Total > 0
。这应确保仅在循环中至少执行一次File System Task
时才触发您的任务。答案 1 :(得分:0)
你可以使用一个布尔变量来实现这一点,即在每个循环的范围之外创建IsError,默认值为False。您可以在使用表达式任务(SSIS 2012)或执行SQL任务将“复制工作到错误”任务成功完成后立即将其设置为True。最后,您的Send Mail任务将连接到For Each循环,并将优先约束设置为Expression - isError。
答案 2 :(得分:0)
当错误发生时,在表格中创建一条记录,其中包含您要包含在电子邮件中的信息 - 例如 1.以完整路径失败的文件 2.具体错误 3.日期/时间
然后在包的末尾,发送一个综合电子邮件。这样,您就有了一个中心位置,以便在您想要重新访问该问题时,或者如果该电子邮件丢失/未送达。
如果您需要实施帮助,请退回。