【发布时间】:2014-08-02 19:10:51
【问题描述】:
我正在尝试从 SQL 源向 Oracle 目标执行插入和更新(当然是 2 个单独的流程)。我遵循了此链接中给出的过程: http://sqlblog.com/blogs/andy_leonard/archive/2007/07/09/ssis-design-pattern-incremental-loads.aspx
因为我的目标包含一个使用 Oracle 序列的列,所以我无法仅使用 OLE DB 目标或 Oracle 目标(attunity 驱动程序),因此我修改了新行路径(插入路径)以使用 OLE DB 命令并输入组件属性 SQL 命令中的以下 T-sql 语句:
insert into AWQMSO.FIRM (
FIRM_ID,
ACM_FIRM_ID,
MSTR_FIRM_ID,
ACTV_IND,
FIRM_STAT_TXT,
CRTE_BY_USR_ID,
CRTE_DTTM,
LST_UPDT_BY_USR_ID,
LST_UPDT_DTTM)
values (
FIRM_SEQ.Nextval,
?,
?,
?,
?,
?,
?,
?,
?)
包然后在 OLE DB 命令(插入)上失败,并显示一个相当无用的错误消息:
错误:数据流任务中的 0xC0202009,OLE DB 命令 1 [571]:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E55。
重复 152 次...应该插入目标表的确切行数。
但是,更新路径使用类似的 T-sql 语句可以正常工作(几乎...仍在与日期格式作斗争):
Update AWQMSO.FIRM
set
FIRM_STAT_TXT = ?
,ACTV_IND = ?
,LST_UPDT_BY_USR_ID = ?
where ACM_FIRM_ID = ?
我能看到的唯一区别是 .Nextval 的硬编码,所以我尝试创建一个包含“FIRM_SEQ.Nextval”而不带引号的派生列。将 FIRM_SEQ.Nextval 更改为 ?并将值映射到新派生的字段,这给了我一个信息更丰富的错误消息,即数据无法插入到 FIRM_ID 字段中,但仍然给我留下同样的问题。
我已成功使用执行 SQL 任务将单行插入到 Oracle 中的统计表中,其中包含使用变量和参数化查询的序列字段。那只是一行,虽然有 4 列,但我不知道如何重现相同类型的东西,将数据集的每一行放入一个变量中,然后执行插入并移动到下一行。
提前感谢您的帮助!
【问题讨论】:
-
0x80040E55 是 DB_E_BADORDINAL 的 OLEDB 错误 - 指定的列不存在。 See the TechNet reference of OLEDB errors here。分享和享受。
-
在执行类似于下面的脚本后,我们发现 DEV 框上的索引一直被破坏,所以上面的原始解决方案工作得很好。