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语句本身包含重复的行,该怎么办?