SSIS事件处理程序仅适用于程序包级别

时间:2013-10-17 14:54:22

标签: ssis event-handling package

我有几个需要按特定顺序运行的软件包。要做到这一点,我有一个额外的包运行所有其余的 我为每次调用包添加了事件处理程序,以便使用OnError,OnPreExecute和OnPostExecute向用户显示进程的状态(执行,成功,失败)。

我没有意识到,在包的每个部分的每次成功时,它都会返回一个OnPostExecute,然后在启动同一个包的下一部分时返回一个新的OnPreExecute。
这会给用户造成混淆,因为他认为某个阶段已经完成但后来发现它仍然在执行。

如何让事件处理程序仅引用包级事件?
任何其他建议也将受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:3)

我想出的解决方案是使用事件处理程序中可用的系统变量之一。在每个OnPreExecute,OnPostExecute和OnError范围中您至少可以找到 @ [System :: SourceName] 变量。

@ [System :: SourceName] 包含举起活动的任务的名称。

使用它可以检查事件是由顶级包本身,一个执行包任务还是包中的任何其他任务引发的。
这样,即使我们无法停止多次调用,我们也可以控制响应。

例如,您很可能会使用基于@ [System :: SourceName]的优先约束来检查它是否是整个包名。

这不是最优雅的解决方案(它要求您拥有EP任务的一致名称,或者在事件处理程序中对它们进行硬编码),但它确实有效。

可悲的是,我找不到一种方法来阻止在主要包中引发子包的事件。

答案 1 :(得分:1)

一个简单的解决方案是在数据库中创建SSIS事件日志表,并在每个事件处理程序参数上创建指定的用户变量,这些变量在列表中可用。然后执行一个 Execute SQL任务以创建连接,并将以下查询添加到

INSERT INTO dbo.SSIS_events (EIGUID, PackageName, SourceName, EventInfo) VALUES (?,?,?,'OnPreExecute')

跟踪特定任务。