2014-10-06 26 views
2

我有一个表,其中包含一个指定为自动递增主键的整数列。SQL Server种子值低于最大标识

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

我的问题是,因为我找不到任何相关的东西,这是怎么发生的?我明白了,为什么你会看到比最高身份更高的种子,而不是相反。

任何帮助表示赞赏。自2012年发布过

+1

我的猜测是某人运行了一个RESEED命令。 – 2014-10-06 22:43:52

回答

0

SQL Server 2012的标识列一直是个问题,跳过标识值,不正确等以下的种子...

您可以在Microsoft Connect记录与微软的错误。

这里有一些其他的人都知道登录的连接有关标识列的错误

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 

这将把身份列重新设置为下一个可用的最高身份值。从而避免将来出现重复问题。

+2

你的两个“bug”都是一样的东西,而不是bug。关闭为“按设计”。差距不是一个错误。重复值将是。 – 2014-10-06 22:41:14