1

我正在使用以下简单insert子句插入几百万行:

insert into DEST_TABLE
select *
from SRC_TABLE

但是插入时可能会出现重复,这会抛出错误,整个操作将结束。

有没有办法从头到尾执行插入操作,并且不会因重复插入错误而中断。忽略重复的插入错误并且不插入它们?

4

4 回答 4

2

最好一起避免这个问题并预先过滤掉它们:

insert into DEST_TABLE
select *
from SRC_TABLE
EXCEPT
select *
from DEST_TABLE
于 2012-10-10T21:20:30.820 回答
1

这些是处理重复行的方法。

  1. 删除约束并插入行。然后使用选项 ignore_dup_row 在表上删除重复项创建聚集索引

  2. 使用选项 ignore_dup_row 删除所有约束在表上创建集群索引。如果行重复,它不会插入。

于 2012-10-11T09:50:13.333 回答
0

好吧,重复插入错误只能来自您的DEST_TABLE.

所以删除 DEST_TABLE 中的约束,插入,清理数据,然后放回约束。

如果您的DEST_TABLE.

另一个(更好的)解决方案是通过更改您的SELECT子句来获取不重复的数据。

于 2012-10-10T21:07:27.107 回答
0

也许 where 子句会很好?

insert into DEST_TABLE
select *
from SRC_TABLE S
where not exists
      (
         select 1
         from DEST_TABLE D
         where D.id=S.id
      )
于 2012-10-10T21:09:11.990 回答