这是一项功能,而不是错误.如果您需要它们紧密连续,我建议使用另一种方案来生成自动编号.I have a .net transaction with a SQL insert to a SQL Server 2005 database. The table has an identity primary key.When an error occurs within the transaction, Rollback() is called. The row inserts are rolled back correctly, however the next time I insert data to the table, the identity is incremented as if the rollback never occurred. So essentially there are gaps in the identity sequence. Is there any way to have the Rollback() method reclaim the missing identity?Am I not approaching this the right way? 解决方案 If you think about it, the auto-increment number should not be transactional. If other transactions had to wait to see if the auto-number was going to be used or "rolled back", they would be blocked by the existing transaction using the auto-number. For example, consider my psuedo code below with table A using an auto-number field for the ID column:User 1------------begin transactioninsert into A ...insert into B ...update C ...insert into D ...commitUser 2-----------begin transactioninsert into A ...insert into B ...commitIf user 2's transaction starts a millisecond after user 1's, then their insert into table A would have to wait for user 1's entire transaction to complete just to see if the auto-number from the first insert into A was used.This is a feature, not a bug. I would recommend using another scheme to generate auto-numbers if you need them to be tightly sequential. 这篇关于即使事务回滚,SQL 标识(自动编号)也会增加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-31 03:22