我有一个带有SQL插入SQL Server 2005数据库的.net事务。该表具有一个身份主键。
当事务内发生错误时,将Rollback()被调用。行插入将正确回滚,但是,下次我将数据插入表时,标识将增加,就好像从未发生过回滚一样。因此,本质上在同一性序列中存在缺口。有什么方法可以让该Rollback()方法回收丢失的身份?
Rollback()
我不是用正确的方法吗?
如果您考虑一下,则自动递增号 不应 是事务性的。如果其他事务必须等待以查看是否要使用或“回滚”自动编号,则使用该自动编号的现有事务将阻止它们。例如,考虑下面我的表A的伪代码,对ID列使用一个自动编号字段:
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的自动编号。
这是一个功能,而不是错误。如果您需要自动编号,我建议使用另一种方案来生成自动编号。