SQL Server种子值低于最大标识

时间:2014-10-06 21:39:33

标签: sql-server sql-server-2012 identity

我有一个包含一个整数的列的表,该列被指定为自动递增的主键。

CREATE TABLE [dbo].[Table]
(
    [TableKey] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [...]
    CONSTRAINT [PK_TableKey] PRIMARY KEY CLUSTERED 
    (
        [TableKey] ASC
    ) 
    WITH 
    (
        PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON, 
        FILLFACTOR = 80
    ) ON [PRIMARY]
) ON [PRIMARY]

此表已经有0到7000条记录插入到M-F,没有问题。上周五〜插入4K记录,其身份值从2,064,682开始,到2,068,076结束。然后今天早上我收到了一个错误...

  

违反PRIMARY KEY约束'PK_TableKey'。无法插入   对象'dbo.Table'中的重复键。重复的键值是   (2067844)。

在经历了许多错误的路径后,我发现当前的种子是表2067845

我的问题是,因为我找不到任何相关内容,这怎么会发生?我看到并理解为什么你会看到比最大身份更高的种子,但不是相反。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

自2012年发布以来,SQL Server 2012 Identity列一直存在问题,跳过标识值,没有正确关注种子等...

您可以在Microsoft Connect处使用microsoft记录错误。

以下是其他一些知道登录连接的有关标识列的错误

Identity Column jumps by Seed value

Failover or Restart Results in Reseed of Identity

另外,为了解决这个问题,您可以执行以下命令

DBCC CHECKIDENT('TableName', RESEED, 0) --<-- to any smallest value 0 would do the trick
DBCC CHECKIDENT('TableName', RESEED)    --<-- Without any seed value  

这会将标识列重新设置为下一个可用的最高标识值。从以后的重复问题中解脱出来。