C#学习教程:SQL Server序列差距分享


SQL Server序列差距

我有一个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 

如果有差距会有什么意外,因此表中缺少对开页。

例:

这意味着事情正在发生。 为了提供更多信息,我使用的INSERT存储过程在INSERT INTO...之前有以下内容INSERT INTO...

 DECLARE @numfolio int SELECT @numfolio = NEXT VALUE FOR Seq.Folio 

从我的应用程序保存信息时,我使用了数据库事务,所以如果一切顺利,那么应用程序执行COMMIT TRANSACTION ,如果不是,我执行ROLLBACK TRANSACTION

我认为问题的根源是事务,所以当出现错误时,序列的NEXT VALUE已经生成, ROLLBACK对此没有影响。

有任何线索如何解决这个问题,以便有一个没有间隙的完美序列?

所以,你应该了解一些关于序列的事情。

  1. 它不是事务性的,所以是的,一旦事务检索到值,回滚就不会恢复它。
  2. 序列的值是按批次分配的,因此假设您将缓存大小设置为10,获取一个值,然后重新启动服务器,将有10的间隙。

至于如何获得一个完美的序列,那么,你可以做到的唯一方法就是从可序列化的事务中获取表中的最大值。 现在你应该问自己的问题是“他们真的需要顺序吗?”。

上述就是C#学习教程:SQL Server序列差距分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031538.html

发表评论

邮箱地址不会被公开。 必填项已用*标注