我正在与 SSIS 2014 合作。我有来自Attunity Oracle Source组件的数十亿行,其源查询有20列,并且耗时。出于某种原因,我需要在另一个引用第一个表的表中插入同一查询的2列。
我想避免在另一个DataFlowTask中再次调用该查询,因此我考虑创建一个WAIT till x_01 finishes
脚本组件任务,该任务将验证x_01
OleDB目标何时完成,然后继续插入第二个表格。
请理解我想在这里实现的目标:
我正在考虑使用x_01_Finished
Package Scope变量并在从x_01
触发PostExecute事件时更改其值,但遗憾的是,x_01
OleDB目标级别的PostExecute不可用。
有没有办法在脚本组件代码中获取其他组件的状态?
如下所示:
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);
}
您是否认为使用此 tecnique 会对高度影响该程序包的性能?
已经尝试过使用非常少量数据的Nick.McDermaid建议。我创建了2个临时表,一个在第一列中使用PK,第二个表在第一个表的PK中使用了FK。即使有这么少的数据,我也收到了这个错误:The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tmp_1_tmp_2".
你可以在下面的截图中看到插入确实非常快,而在第二个数据块中,x_02
对象意图插入在第一个之前(由于这个FK而无法实现)。
所以,我的下一个想法是睡觉一些毫秒,而在插入第二个表之前读取只是第一行。我们将看看这是否有帮助。