IDENT_CURRENT返回的值小于MAX(ID)

时间:2016-11-18 19:34:34

标签: sql sql-server tsql

我有一张这样的表:

CREATE TABLE [dbo].[RequestQueue]
(
    [QueueID] [BIGINT] IDENTITY(1,1) NOT NULL,
    [EntryDate] [DATETIME] NULL 
         CONSTRAINT [DF_SecurityQueue_EntryDate]  DEFAULT (GETDATE()),
    [AsOfDate] [DATE] NULL,
    [ItemID] [VARCHAR](32) NULL,
    [ItemType] [VARCHAR](50) NULL,
    [Message] [VARCHAR](MAX) NULL,

     CONSTRAINT [PK_QueueID] 
        PRIMARY KEY CLUSTERED ([QueueID] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

我有一个每天运行的SQL作业,将数据插入此表,insert语句如下:

INSERT INTO dbo.RequestQueue( AsOfDate , ItemID , ItemType )
VALUES  ( GETDATE(),'ABC1','TYPE1' )

这项日常工作运行正常一年多,直至昨晚以下信息打破:

  

Ms 2627,Level 14,State 1,Line 25
  违反PRIMARY KEY约束'PK_QueueID'。无法在对象'dbo.RequestQueue'中插入重复键。重复键值为(1698922)。

我检查了身份值如下:

SELECT IDENT_CURRENT('dbo.RequestQueue')

返回1698922

SELECT MAX([QueueID]) 
FROM [dbo].[RequestQueue]

返回1699269

什么搞砸了IDENT_CURRENT

SQL作业按日计划运行,每天运行一次。

RequestQueue表有一些并发读者,他们也发出更新语句,当然,从不在PK列上。

其他地方没有其他插入作业/流程。

1 个答案:

答案 0 :(得分:0)

使用以下命令

看起来有时会对您的表进行重新编辑
DBCC CHECKIDENT (YourTable, RESEED, 999)