自动递增重复的数字

时间:2015-09-15 12:51:33

标签: sql-server

我有一个数据库,通过使用重复的数字作为主键的一部分来处理重复的记录。我试图插入一些我已从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  

2 个答案:

答案 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,如果没有匹配,则生成普通插入。

相关问题