2016-11-18 53 views
1

我有这样的一个表:IDENT_CURRENT超过MAX(ID)返回价值不大

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 INTO dbo.RequestQueue(AsOfDate , ItemID , ItemType) 
VALUES (GETDATE(),'ABC1','TYPE1') 

这每天的工作运行良好了一年多,直到昨晚打破了以下消息:

消息2627,级别14,状态1,行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列。

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

+0

难道你让用户手动插入记录? – BJones

+0

没有手动插入,也没有其他自动化过程。此表位于业务敏感的数据库上,有控制层以防止手动数据操作。 –

+0

桌子上是否有插入触发器? – DForck42

回答

0

看起来你的表是补种-ED有些时候使用任何类似下面的命令

DBCC CHECKIDENT (YourTable, RESEED, 999) 
+0

谢谢Kannan。它确实看起来像重新布局,但我有充分的理由相信,没有手动执行这些命令或任何数据操作命令。它可能是由更新表中消息列的并发进程引起的吗? –