【发布时间】:2017-11-25 01:59:11
【问题描述】:
T-SQL:
BEGIN TRANSACTION
Insert (col1,col2,col3)
values (1,2,3)
在执行上述 t-sql 然后ROLLBACK TRANSACTION MS-SQL 不会递减自动递增的列。知道为什么吗?
我找到了答案here。这个答案是否适用于 MS-SQL?
【问题讨论】:
标签: sql tsql auto-increment decrement
T-SQL:
BEGIN TRANSACTION
Insert (col1,col2,col3)
values (1,2,3)
在执行上述 t-sql 然后ROLLBACK TRANSACTION MS-SQL 不会递减自动递增的列。知道为什么吗?
我找到了答案here。这个答案是否适用于 MS-SQL?
【问题讨论】:
标签: sql tsql auto-increment decrement
是的,一旦分配,SQL Server 将不会“重复使用”身份号码。而且,不保证值会是consecutive:
事务中的连续值 - 插入事务 不保证多行获得行的连续值 因为表上可能会发生其他并发插入。如果值 必须是连续的,那么事务应该使用排他锁 在表上或使用 SERIALIZABLE 隔离级别。
您可以使用DBCC CHECKIDENT 更改标识值,但最好将它们视为唯一的系统 ID,不要假设任何关于顺序的内容。
您可能还想看看 SEQUENCE,它比 IDENTITY 有一些优势。
【讨论】: