事务回滚时如何保持身份?

时间:2013-04-22 19:26:16

标签: sql sql-server-2008

假设我在表上有ID列,并且最大ID值为100。 然后我在一个事务中在此表中插入50行,最大ID将为150。 但是事务被回滚。但是下一个ID值是151,而不是101。 这意味着在回滚事务时不会回滚最大ID值。 如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这就是IDENTITY列的工作方式,它非常符合设计。原因是这些值被分发但没有回滚以提高效率。如果必须为分配了标识值的每个事务锁定整个表,那么绝对会破坏并发性和性能。老实说,你不应该关心差距,因为你不能用IDENTITY列阻止它们。有解决方法,但它们也会破坏并发性和性能。