2016-11-18 52 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。它確實看起來像重新佈局,但我有充分的理由相信,沒有手動執行這些命令或任何數據操作命令。它可能是由更新表中消息列的併發進程引起的嗎? –