Dav*_*vid 3 sql-server transactions rollback identity-column
在SQL Server中,如果涉及插入新行的事务被回滚,则会在标识字段中跳过一个数字.
例如,如果Foos表中的最高ID 为99,那么我们尝试插入新Foo记录但回滚,然后ID 100"用完",下一Foo行将编号为101.
是否有任何方法可以更改此行为,以确保标识字段是顺序的?
你所追求的将永远不会与标识列一起使用.
它们旨在"放弃"并忘记,按设计,以便它们不会导致等待或死锁等.该属性允许IDENTITY列用作高事务性系统中的序列,没有延迟或瓶颈.
确保没有间隙意味着没有办法实现每秒100次插入的系统,因为会有一个很长的队列来确定第一个插入是否会被回滚.
出于同样的原因,您通常不希望出现此行为,也不需要高容量表的数字序列.但是,对于非常罕见的单进程表(例如每月一个进程的发票号),可以在一个MAX(number)+1或类似的查询周围放置一个事务,例如
declare @next int
update sequence_for_tbl set @next=next=next+1
.. use @next
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |