我在表中創建主鍵MSSQL 2008年增加ID每分鐘
[id] [bigint] IDENTITY(1,1) NOT NULL
我注意到,ID增加有關在上週的每一分鐘。我用來檢查增加:
DBCC CHECKIDENT ('Issue');
我找不到任何觸發器或其他東西。我不創建和刪除表中的記錄。這可能是MsSql的錯誤嗎?
我正在使用MsSql 2008 R2。
我在表中創建主鍵MSSQL 2008年增加ID每分鐘
[id] [bigint] IDENTITY(1,1) NOT NULL
我注意到,ID增加有關在上週的每一分鐘。我用來檢查增加:
DBCC CHECKIDENT ('Issue');
我找不到任何觸發器或其他東西。我不創建和刪除表中的記錄。這可能是MsSql的錯誤嗎?
我正在使用MsSql 2008 R2。
該問題可能與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
所以每當一個交易回滾身份不會被重置
可能會出現您添加了一些行然後刪除的情況。 這樣做後,ID將被刪除的最後一行ID加1。
但是我得到了1000之間的id之間的區別!這是一個非常大的價值。 – Paul 2014-10-27 12:06:07
是的......這是很大的差異。我做了很多次但是這個問題從來沒有發生在我身上。 – 2014-10-27 12:08:16
@Paul請參閱https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restart-results-in-reseed-of-identity – 2014-10-27 13:27:59
要檢查的另一件事是任何新的存儲過程是正確的。我遇到了人們編寫了更改並忘記了兩部分之間的GO
的情況,因此第二部分包含在存儲過程中。我們神祕地將記錄添加到表格中。它需要一段時間才能抓住它。
就你而言,它可能正在做一些事情(如在表中填充數據),但事務正在導致它回滾。
你究竟是什麼意思與「*我的數據庫創建ID不是一個序列號*」 – 2014-10-27 11:57:48
我的數據庫不會增加ID的值爲1.我得到一個奇怪的值,如3000,然後3120,然後3822 ,然後5326.我找不到原因。 – Paul 2014-10-27 12:05:02
你正在使用什麼版本的MSSQL? – mxix 2014-10-27 12:39:08