【问题标题】:SSIS event handlers only for package level仅适用于包级别的 SSIS 事件处理程序
【发布时间】:2013-10-17 14:54:21
【问题描述】:

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

我没有意识到的是,在包的每个部分每次成功时,它都会返回一个 OnPostExecute,然后在启动同一包的下一部分时返回一个新的 OnPreExecute。
这会导致用户感到困惑,因为他认为一个阶段已经完成,但随后看到它仍在执行。

如何让事件处理程序仅引用包级事件?
任何其他建议也将不胜感激。

谢谢!

【问题讨论】:

    标签: ssis event-handling package


    【解决方案1】:

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

    @[System::SourceName] 包含引发事件的任务的名称。

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

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

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

    遗憾的是,我找不到一种方法来防止子包中的事件在主包中引发。

    【讨论】:

    • 这太棒了。我会说这并不优雅,尤其是与其他几个可用的选项相比。
    【解决方案2】:

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

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

    跟踪特定任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多