我认为您在如何使用事务方面处于正确的轨道,问题是IDENTITY列的种子不会回滚。
我猜您正在使用MS SQL Server?要重置IDENTITY列而不重新创建表,可以使用DBCC CHECKIDENT。
DBCC CHECKIDENT (table_name, RESEED, 99);
这将重置种子,以便分配的下一个标识值将为100。当然,您必须在BEGIN TRANSACTION之前记录表的最高标识值。
仅在有单个编写器进程的情况下才使用此功能。在多作者的情况下,除非首先进行一些认真的表锁定,否则很可能会使事情变得井井有条。对于多位编写者,我认为您最好将其余的代码编写出来,这样可以接受“标识”列值中的“漏洞”。



