我试图创建SSIS包以执行相对简单的ETL。
我的连接管理器是DB2 .Net提供程序(.Net Providers / IBM DB2 .NET Data Priovider)。
我的数据源是ADO NET Source。它在SQL命令模式下工作。
以下命令有效:
select first 10 *
from part
但这不起作用:
select first 10 *
from part
into temp temp2;
select *
from temp2;
drop temp table temp2;
实际上它表现得很奇怪。 首次执行后(按下按钮'预览...')我通常会收到此错误:
Pipeline component has returned HRESULT error code 0xC02020FE from a method call. (Microsoft.SqlServer.DTSPipelineWrap)
第二次执行后(按下按钮'预览...'再次)我得到数据集!
然而,在第三次执行(和连续执行)之后,错误告诉......
ERROR [IX000] [IBM][IDS/UNIX64] Temp table (temp3) already exists in session. (IBM.Data.DB2)
谷歌搜索引导我无处可寻:(
这背后有什么逻辑,以及如何解决它?
更新
将查询封装在STORED PROCEDURE中并使用EXECUTE PROCEDURE调用它...
CREATE PROCEDURE MY_DATA()
RETURNING CHAR(256), CHAR(256);
DEFINE l_fld1 CHAR(256);
DEFINE l_fld2 CHAR(256);
SELECT first 10 fld1, fld2
FROM part
INTO TEMP temp2;
FOREACH
SELECT fld1, fld2
INTO l_fld1, l_fld2
FROM temp2
RETURN l_fld1, l_fld2
WITH RESUME;
END FOREACH
DROP TEMP TABLE temp2;
END PROCEDURE
......我有一些新问题:
ERROR [IX000] [IBM][IDS/UNIX64] Temp table (otkalcec.temp2) already exists in session.
更新2:
存在与SSIS消耗Informix驱动程序参数相关的问题,我并不知道它存在:"连接生命周期"。这解决了前两个问题。
现在预览结果集正常。我唯一的问题是缺少列中的列信息。除了这一切之外,一切似乎都在起作用,而且我无法在不破坏列信息的情况下继续进行! >:(