2013-12-17 95 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. 

所以,无论从这项事业得到重复的变化。