2014-10-27 71 views
0

我在表中創建主鍵MSSQL 2008年增加ID每分鐘

[id] [bigint] IDENTITY(1,1) NOT NULL   

我注意到,ID增加有關在上週的每一分鐘。我用來檢查增加:

DBCC CHECKIDENT ('Issue'); 

我找不到任何觸發器或其他東西。我不創建和刪除表中的記錄。這可能是MsSql的錯誤嗎?
我正在使用MsSql 2008 R2。

+1

你究竟是什麼意思與「*我的數據庫創建ID不是一個序列號*」 – 2014-10-27 11:57:48

+0

我的數據庫不會增加ID的值爲1.我得到一個奇怪的值,如3000,然後3120,然後3822 ,然後5326.我找不到原因。 – Paul 2014-10-27 12:05:02

+0

你正在使用什麼版本的MSSQL? – mxix 2014-10-27 12:39:08

回答

1

該問題可能與transaction rollbacks有關。回滾會刪除包含在一個事務中的數據行,但它不重置標識值到以前的設置

檢查這個

CREATE TABLE #ident 
( 
     ID INT IDENTITY(1,1) 
     , column1 VARCHAR(20) NULL 
) 

INSERT #ident 
VALUES ('a'),('b'),('c') 


BEGIN TRAN 
INSERT #ident 
VALUES ('d'),('e'),('f') 
ROLLBACK TRAN 

INSERT #ident 
VALUES ('g'),('h'),('i') 

select * from #ident 

和結果是

ID column1 
-- ------- 
1 a 
2 b 
3 c 
7 g 
8 h 
9 i 

所以每當一個交易回滾身份不會被重置

0

可能會出現您添加了一些行然後刪除的情況。 這樣做後,ID將被刪除的最後一行ID加1。

+0

但是我得到了1000之間的id之間的區別!這是一個非常大的價值。 – Paul 2014-10-27 12:06:07

+0

是的......這是很大的差異。我做了很多次但是這個問題從來沒有發生在我身上。 – 2014-10-27 12:08:16

+0

@Paul請參閱https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restart-results-in-reseed-of-identity – 2014-10-27 13:27:59

0

要檢查的另一件事是任何新的存儲過程是正確的。我遇到了人們編寫了更改並忘記了兩部分之間的GO的情況,因此第二部分包含在存儲過程中。我們神祕地將記錄添加到表格中。它需要一段時間才能抓住它。

就你而言,它可能正在做一些事情(如在表中填充數據),但事務正在導致它回滾。