0

我正在使用SSIS 2014。我有几千万行来自 Attunity Oracle Source 组件,它的源查询有 20 列,而且很耗时。出于某种原因,我需要在另一个引用第一个表的表中插入同一查询的 2 列。

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

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

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

问题一:

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

类似于以下内容:

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:

您认为使用这种技术会极大影响包装性能吗?

更新 1

已经用非常少量的数据尝试了Nick.McDermaid的建议。我创建了 2 个临时表,一个在第一列中带有 PK,第二个表在第一个表的这个 PK 中带有 FK。即使有这么少量的数据,我也得到了这个错误:The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tmp_1_tmp_2".您可以在下面的屏幕截图中看到插入确实非常快,并且在第二个数据块中,x_02打算在第一个数据块之前插入的对象(这是不可能的由于这个FK)

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

截屏

4

0 回答 0