代码之家  ›  专栏  ›  技术社区  ›  Ahsan Ali

如果存在,则重置主键中的重复值

  •  1
  • Ahsan Ali  · 技术社区  · 6 年前

    我有一个 table 如下所示:

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

    在哪儿 TestNo Primary Key 并具有以下值。 请注意 4, 5 试验编号 此处缺少值。我需要的是插入新值 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\u qcunite\uu 554AD375D32C4684”。无法在对象“dbo.QCUnitTest”中插入重复键。重复的键值是(6)。 声明已终止。

    那么,如果存在的话,有没有超越价值的方法呢?就像在我的情况下它应该跨过它 8 .

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tab Alleman    6 年前

    不,无法让标识列自动跳过已存在的值。

    唯一可以填补身份栏中空白的方法(同时保留现有值)是暂时关闭身份并手动填补空白,然后切换身份。