2013-12-17 82 views
2

我們使用的是SQL Server 2012,並且對需要自動遞增值類型爲int的列使用序列。Microsoft SQL Server序列

在極少數情況下,當序列當前值沒有更新到下一個值時,我們會遇到問題。

最近,當我們的服務器重新啓動SQL有服務,我們面臨着類似的問題,下面創建序列..

CREATE SEQUENCE [dbo].[SqID] 
AS [int] 
START WITH 1 
INCREMENT BY 1 
MINVALUE 0 
MAXVALUE 2147483647 
CACHE 
GO 

SqID,Current Value = 12 In SQL ..

我在其中用於插入使用上述順序記錄的表,有插入的記錄與

SqID (13, 14, 15....) 

一旦重新啓動服務器,然後在與重複的鍵拋出異常時插入查詢。

所以我的問題是,在這種情況下當前值SqID沒有正確更新,爲什麼?以上情況是否有任何解決方法可以避免手動重新啓動序列?

或者在SQL Server中沒有可以在SQL服務(啓動/停止)出現問題時自動重啓序列的東西?

謝謝

+1

你能展示你序列的定義嗎? – JohnFx

+0

約翰,找到這句法序列構建CREATE SEQUENCE [DBO]。[SQID] AS [INT] 1個 遞增 START BY 1 MINVALUE 0 MAXVALUE 2147483647 CACHE GO – Viral

+1

完全是您最新有更新?你也可以描述究竟發生了什麼?序列認爲'NEXT VALUE'是什麼,它試圖插入什麼樣的重複密鑰?這是最後一個被一個人用掉嗎?你怎麼使用序列?它是作爲默認列值嗎?我發現[此連接項目](http://connect.microsoft.com/SQLServer/feedback/details/790161/next-value-for-sequence-can-fail-to-return-proper-next-value) 2票絕對不是一個普遍的投訴。另外兩個人在那裏評論指出重負荷不重新啓動。 –

回答

1

看來,在SQL2012中有一些報告類似於您的問題。請檢查herehere

我發現的唯一的解決辦法是:

ALTER SEQUENCE dbo.SqIDNO CYCLE NO CACHE; 

,這將影響性能。

關於以前建議的原因,文檔指出:

If the Database Engine stops abnormally for an event such as a power failure, the sequence restarts with the number read from system tables (39). Any sequence numbers allocated to memory (but never requested by a user or application) are lost. 

所以,無論從這項事業得到重複的變化。