我有一个SQL问题,这让我忙了几天。我想要的只是将大多数行从一个表(ORIGIN)复制到另一个表(DESTINATION),但是,在DESTINATION中,不应有具有相同PRIMARY KEY的行。在ORIGIN中,给定时刻可能会有很多重复项。好吧,到目前为止,我们有很多方法可以解决这些问题,它们在MySQL中一直为我工作(这就是我一直使用的方法)。但是现在我被迫使用SQL Server 2008。
到目前为止,我已经尝试过NOT EXIST,NOT IN和JOIN方法。我无所谓,我总是收到臭名昭著的dupe key错误。例如,如果我使用此:
insert into DESTINATION
select *
from ORIGIN
where ORIGIN.[MY-PRIMARY-KEY-FIELD] not in
(select [MY-PRIMARY-KEY-FIELD] from DESTINATION)
然后我得到这个:
违反主键约束'PK__DESTINAT__52F5604C11CBEE86'。无法在对象“ dbo.DESTINATION”中插入重复键。重复的键值为(00013884880195)。
指定的值当然会在ORIGIN中重复,但这就是为什么我在插入之前检查它是否还存在于DESTINATION中的原因。我与其他方法得到相同的确切错误消息。什么都行不通。
我唯一能想到的是,也许这是线程化或正在做怪异的事情,以便在我们进行检查时行仍不存在。有没有一种方法可以强制某种“同步模式”,以便在我们检查数据时将信息尽快推入表中,以确保数据在那里?那是丢掉那个的简单方法...
也许我在这里绕过一些愚蠢的事情。我不知道。因此,任何有关此处可能发生的情况的提示都将受到欢迎。
预先感谢。
也许这是一个更好的选择。
insert into DESTINATION
Select * from (
select <column_list>,
row_number() over (partition by PK order by PK ) as rnm
from origin)Temp
where rnm=1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句