SSIS2014如何在同一DataFlowTask中获取Destination组件的状态

时间:2018-01-24 10:22:23

标签: ssis ssis-2016 ssis-2014

我正在与 SSIS 2014 合作。我有来自Attunity Oracle Source组件的数十亿行,其源查询有20列,并且耗时。出于某种原因,我需要在另一个引用第一个表的表中插入同一查询的2列。

我想避免在另一个DataFlowTask中再次调用该查询,因此我考虑创建一个WAIT till x_01 finishes脚本组件任务,该任务将验证x_01 OleDB目标何时完成,然后继续插入第二个表格。

请理解我想在这里实现的目标:here

我正在考虑使用x_01_Finished Package Scope变量并在从x_01触发PostExecute事件时更改其值,但遗憾的是,x_01 OleDB目标级别的PostExecute不可用。

问题1:

有没有办法在脚本组件代码中获取其他组件的状态?

如下所示:

public override void PreExecute() {
    base.PreExecute();
    int sec = 5; //number of seconds to check the status of x_01 Component
    int ms  = sec * 1000;
    bool lbo_x01_Finished = false;
    do {
        System.Threading.Thread.Sleep(ms);
        lbo_x01_Finished = IsComponent_Finished("x01"); //returns true when x01 component finished
    } while(!lbo_x01_Finished);
}

问题2:

您是否认为使用此 tecnique 会对高度影响该程序包的性能?

更新1

已经尝试过使用非常少量数据的Nick.McDermaid建议。我创建了2个临时表,一个在第一列中使用PK,第二个表在第一个表的PK中使用了FK。即使有这么少的数据,我也收到了这个错误:The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tmp_1_tmp_2".你可以在下面的截图中看到插入确实非常快,而在第二个数据块中,x_02对象意图插入在第一个之前(由于这个FK而无法实现)

所以,我的下一个想法是睡觉一些毫秒,而在插入第二个表之前读取只是第一行。我们将看看这是否有帮助。

screenshot

0 个答案:

没有答案