Tsql 如何在Sybase T-SQL中跳过重复记录的插入并继续?

Tsql 如何在Sybase T-SQL中跳过重复记录的插入并继续?,tsql,sybase,Tsql,Sybase,我使用以下简单的insert子句插入数百万行: insert into DEST_TABLE select * from SRC_TABLE 但是,插入时可能存在重复项,这将引发错误,整个操作将结束 是否有一种方法可以从头到尾执行插入操作,并且不会因重复插入错误而中断。忽略重复插入错误而不插入它们?嗯,重复插入错误只能来自DEST\u表中的约束 因此,删除DEST_表中的约束,插入、清理数据,并将约束放回原处 在某些情况下,如果您的DEST_表中已经有数据,这可能会有问题 另一个(更好的)解决

我使用以下简单的
insert
子句插入数百万行:

insert into DEST_TABLE
select *
from SRC_TABLE
但是,插入时可能存在重复项,这将引发错误,整个操作将结束


是否有一种方法可以从头到尾执行插入操作,并且不会因重复插入错误而中断。忽略重复插入错误而不插入它们?

嗯,重复插入错误只能来自
DEST\u表中的约束

因此,删除DEST_表中的约束,插入、清理数据,并将约束放回原处

在某些情况下,如果您的
DEST_表中已经有数据,这可能会有问题


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

也许where子句会更好

insert into DEST_TABLE
select *
from SRC_TABLE S
where not exists
      (
         select 1
         from DEST_TABLE D
         where D.id=S.id
      )

最好避免所有问题,并提前过滤掉:

insert into DEST_TABLE
select *
from SRC_TABLE
EXCEPT
select *
from DEST_TABLE

这些是处理重复行的方法

  • 删除约束并插入行。 然后,若要删除重复项,请在表上使用选项ignore\U dup\U row创建聚集索引

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


  • 这很好。当存在来自当前插入的重复记录时,它是否有帮助?换句话说,我可以看到它在何处防止已经存在的行出现重复,但如果我的insert语句本身包含重复的行,该怎么办?