【发布时间】:2013-05-09 22:48:37
【问题描述】:
我有一个SEQUENCE,用于设置表的交易对开:
CREATE SEQUENCE [Seq].[Folio]
AS [bigint]
START WITH 114090
INCREMENT BY 1
MINVALUE -9223372036854775808
MAXVALUE 9223372036854775807
CACHE
今天出于好奇我做了一个:
SELECT folio
FROM transactions
ORDER BY folio DESC
还有什么令人惊讶的空白,所以表格中缺少对开页。
例子:
- 898、897、894、892、890、889 ...
这意味着正在发生一些事情。只是为了提供更多信息,我使用的INSERT 存储过程在INSERT INTO... 之前有以下内容
DECLARE @numfolio int
SELECT @numfolio = NEXT VALUE FOR Seq.Folio
从我的应用程序中保存信息时,我使用了数据库事务,所以如果一切顺利,则应用程序执行COMMIT TRANSACTION,否则我执行ROLLBACK TRANSACTION。
我认为问题的根源是事务,所以当出现错误时,序列的NEXT VALUE已经生成,ROLLBACK对此没有影响。
任何线索如何解决这个问题以获得完美的无间隙序列?
【问题讨论】:
标签: c# sql sql-server sqltransaction