在 PLSQL 中,我运行:
truncate table MyOracleTableName;
commit work;
insert into MyOracleTablename
select a,b,c,trunc(sysdate) as datadate
from AnotherOracleTableName
where there is a ton of nasty criteria
union
select a,b,c,trunc(sysdate) as datadate from AnotherOracleTableName
where there is a ton of different nasty criteria;
commit work;
在 PLSQL Developer 中,这会插入一行。当我在 SSIS 中运行 SQL(不带分号和提交工作语句)时,我从 MyOracleTableName 得到主键违规。
我已经验证了来自 SSIS 的截断是在 Oracle 中提交的。
当我在 PLSQL Developer 中运行上面的 SQL 并用 union all 替换 union 时,我看到第二行并且插入因 PK 违规而失败。因为它应该与一个联合都允许重复。
这是目前使用 MSDAORA 的 SSIS 2005 包的一部分,它工作得很好。我现在正在使用 Oracle 的本机 OLE DB 提供程序在 SSIS 2008 中重写。
我无法在新环境中使用 MSDAORA。这是一个驱动程序问题吗?除了将它们分成多个语句,第二个语句只插入 MyOracleTableName 中没有的内容之外,还有其他解决方法吗?
问候。