我有一个包含一个整数的列的表,该列被指定为自动递增的主键。
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
。
我的问题是,因为我找不到任何相关内容,这怎么会发生?我看到并理解为什么你会看到比最大身份更高的种子,但不是相反。
感谢任何帮助。
答案 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
这会将标识列重新设置为下一个可用的最高标识值。从以后的重复问题中解脱出来。