我们正在使用SQL Server 2012
并使用序列作为需要自动递增int
类型值的列。
在极少数情况下,当序列当前值未更新为下一个值时,我们会遇到问题。
最近,当我们的服务器重新启动了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服务出现问题(启动/停止)时自动重启序列的事情?
由于
答案 0 :(得分:1)
似乎在SQL2012中有一些类似于您的问题的报告。查看here和here。
我找到的唯一解决方案如下:
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.
所以,没有改变从这个原因获得重复。