在 SQL Server 中,如果涉及插入新行的事务被回滚,则标识字段中的数字将被跳过。
例如,如果Foos
表是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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)