覆盖主键中的重复值(如果存在)

时间:2018-07-31 10:28:15

标签: sql sql-server sql-server-2014

我有一个table,如下所示:

+--------+--------+
| TestNo | Value  |
+--------+--------+
|      1 | Test1  |
|      2 | Test2  |
|      3 | Test3  |
|      6 | Test6  |
|      7 | Test7  |
+--------+--------+

其中TestNoPrimary Key,并具有以下值。 请注意,此处缺少4, 5 TestNo值。我需要插入以TestNo 4开头的新值。 所以我这样做了:

dbcc checkident('tbl', reseed, 3)

它有效,并且在插入2条记录之后:

+--------+-------+
| TestNo | Value |
+--------+-------+
|      1 | Test1 |
|      2 | Test2 |
|      3 | Test3 |
|      4 | Test4 |
|      5 | Test5 |
|      6 | Test6 |
|      7 | Test7 |
+--------+-------+

但是插入第三条记录后,出现以下错误:

  

违反主键约束'PK__QCUnitTe__554AD375D32C4684'。无法在对象'dbo.QCUnitTest'中插入重复键。重复键值为(6)。   该声明已终止。

那么,如果存在该值,有什么方法可以超越它?就像在我的情况下一样,它应该超越它到8

1 个答案:

答案 0 :(得分:0)

否,没有办法让IDENTITY列自动跳过已经存在的值。

您唯一可以做的就是在IDENTITY列中填充空白(同时保持现有值),就是暂时关闭IDENTITY并手动填充空白,然后重新打开IDENTITY。