我有一本书.net事务,并将SQL插入SQL Server 2005数据库.该表有一个标识主键.
当事务中发生错误时,调用Rollback()
.行插入被正确回滚,但是下次我向表中插入数据时,标识会增加,就好像从未发生回滚一样.因此,本质上,身份序列中存在差距.有没有办法让Rollback()
方法找回丢失的身份?
我的方法不对吗?
我有一本书.net事务,并将SQL插入SQL Server 2005数据库.该表有一个标识主键.
当事务中发生错误时,调用Rollback()
.行插入被正确回滚,但是下次我向表中插入数据时,标识会增加,就好像从未发生回滚一样.因此,本质上,身份序列中存在差距.有没有办法让Rollback()
方法找回丢失的身份?
我的方法不对吗?
如果你仔细想想,自动递增数字should not可能是事务性的.如果其他交易必须等待,看看自动编号是否将被使用或"回滚",它们将被使用自动编号的现有交易阻止.例如,在表A下面使用pID列的自动编号字段来考虑我的pSueDO代码:
User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit
User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit
如果用户2的事务在用户1的事务开始后一毫秒开始,那么他们对表a的插入将不得不等待用户1的整个事务完成,以查看是否使用了第一次插入a的自动编号.
这是一个功能,不是一个bug.我建议使用另一种方案来生成自动编号,如果你需要它们是紧密顺序的.