我有一个SEQUENCE用于设置表的事务对开的表:
CREATE SEQUENCE [Seq].[Folio]
AS [bigint]
START WITH 114090
INCREMENT BY 1
MINVALUE -9223372036854775808
MAXVALUE 9223372036854775807
CACHE
Run Code Online (Sandbox Code Playgroud)
今天只是为了好奇我做了一个:
SELECT folio
FROM transactions
ORDER BY folio DESC
Run Code Online (Sandbox Code Playgroud)
如果有差距会有什么意外,因此表中缺少对开页.
例:
这意味着事情正在发生.只是为了提供更多信息,INSERT我使用的存储过程之前有以下内容INSERT INTO...
DECLARE @numfolio int
SELECT @numfolio = NEXT VALUE FOR Seq.Folio
Run Code Online (Sandbox Code Playgroud)
从我的应用程序保存信息时,我使用了数据库事务,所以如果一切顺利,那么应用程序会执行COMMIT TRANSACTION,如果不是,我会执行此操作ROLLBACK TRANSACTION.
我认为问题的根源是事务,所以当出现错误NEXT VALUE时,序列已经生成,并且ROLLBACK对此没有影响.
有任何线索如何解决这个问题,以便有一个没有间隙的完美序列?