我有一个Microsoft SQl server 2005数据库,其中一个表的主键具有标识规范,设置为yes以自动递增。
最近主键跳过两个数字(我理解这是正常的,因为它们不一定是连续的)。
但是我想知道,如果可能的话,为什么他们跳过了,什么时候跳过,即如果发生存储过程回滚并且主键序列没有回滚或者它们以某种方式被删除。
我的问题是,Microsoft SQL服务器管理工作室是否有一个指定的区域,存储此类记录,即事务日志等供我查看以尝试确定此跳过发生的原因。
答案 0 :(得分:2)
假设您的IDENTITY每次增加1,那么如果发生ROLLBACK,您将在您的ID中看到haps - 如果发生回滚,则IDENTITY值不将被还原所以它为该操作分配的ID值基本上会丢失。这完全是正常行为。
假设你有大量的INSERT,如果一个插入失败/回滚,那么回滚IDENTITY值增加将是一场噩梦,因为同时可能有一大堆INSERT。
答案 1 :(得分:1)
除非你的代码记录下来,否则没有记录。所以没有:SQL Server没有注意到这一点。
事务回滚或INSERT错误(单个语句回滚)将在数字序列中生成间隙。 SQL Server没有注意到这一点。