我有一个数据库,通过使用重复的数字作为主键的一部分来处理重复的记录。我试图插入一些我已从Audit表中恢复的行。但是,当我去插入记录时,我违反了主键。 (但这些并不是重复的,因此,将其作为唯一的字段应考虑到密钥中)。我的问题是,如果我在插入带有select / insert语句的记录时发生违规,或者我需要采取不同的方法,是否有办法自动增加重复数字。
fieldA nvarchar(255) not null,
fieldB nvarchar(255) not null,
duplicateNbr int not null,
fieldD nvarchar(255) null, /* Should be part of the key */
Table1
'Dave','Jones','FieldD1'
'Dave', Jones','FieldD2'
INSERT INTO Table2 (FName, LName, DuplicateNbr, FieldD)
SELECT FName, LName, 0, FieldD FROM TABLE1
答案 0 :(得分:1)
在TABLE1的SELECT语句中,可以使用带有PARTITION BY子句的ROW_NUMBER()函数来为每个重复集中的重复行编号
以下SQL教程显示了一种检测重复项并使用SQL Row_Number() with Partition By
删除它们的方法这是查询
INSERT INTO Table2 (fieldA, fieldB, DuplicateNbr, FieldD)
SELECT
fieldA,
fieldB,
duplicateNbr = ROW_NUMBER() over (partition by fieldA, fieldB Order by newid())-1,
fieldD
FROM TABLE1
我希望它有所帮助,
答案 1 :(得分:0)
我会使用merge statement。
只需在“匹配”子句中生成一个新的唯一ID,如果没有匹配,则生成普通插入。