【问题标题】:SSIS Event (or something) when a package ends包结束时的 SSIS 事件(或其他事件)
【发布时间】:2012-03-29 20:41:31
【问题描述】:

我需要一种方法来在我的 ssis 包结束时执行存储过程。

不管是失败还是成功。

有没有什么方法可以在不连接我每个任务的失败事件的情况下做到这一点?我一直在寻找 OnPackageEnd 事件之类的,但我看不到它。

你们有什么想法吗?

【问题讨论】:

  • 需要注意的是,有些情况会导致包验证失败(本质上是编译时错误)。无论您的包中的错误检测逻辑在哪里,如果包无法验证,它将无法运行足够长的时间来触发错误处理块。然后理论上一张表在 10 天内都没有加载,然后您就会有愤怒的销售人员和会计师,因为他们无法生成工资单。在这样的假设场景中,您需要一个备份错误通知机制,例如 SQL 代理的警报选项

标签: sql-server sql-server-2008 ssis


【解决方案1】:

在包中将所有任务放在一个容器中。在容器下方放置执行程序任务,并为优先约束选择值作为“完成”(该行默认为蓝色,绿色)。所以不管包状态(成功或失败),存储过程都会被执行。

【讨论】:

  • 这似乎是最好的解决方案。您只需要在容器中您想要的块之前和之后删除连接器(如果有的话),选择块并将其拖到容器中。然后,当然,根据需要将连接器添加到序列容器。
【解决方案2】:

嗯,我认为最简单的事情是将 proc 的执行添加为执行包的作业中的第二步,您可以在那里指定您可以在失败和成功时进入下一步。

或者您将 Exec SQL 任务放在流程结束时执行包(获取成功分支)并将其放在所有失败的事件处理程序中(我们在包级别执行事件处理程序而不是针对个人步骤),我们在一个步骤中执行相同的过程,但在失败或成功的情况下使用不同的输入值。

【讨论】:

    【解决方案3】:

    您可以在 pacakge 的 PostExecute 上创建一个事件处理程序,并在其中将 proc 添加到执行 SQL 任务上

    将所有当前组件添加到序列容器中,然后将绿色箭头拖到带有您的过程的新执行 sql 任务组件。 双击绿色箭头并选择“完成”而不是“成功”

    【讨论】:

      【解决方案4】:

      OnPostExecute 为每个任务执行。因此,这对于需要 OnPackageEnd 类型的事件的需求来说是不利的。

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        相关资源
        最近更新 更多