Microsoft SQL Server序列

时间:2013-12-17 07:37:02

标签: sql-server sql-server-2012 sequences

我们正在使用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服务出现问题(启动/停止)时自动重启序列的事情?

由于

1 个答案:

答案 0 :(得分: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.

所以,没有改变从这个原因获得重复。