【问题标题】:Rollback transaction does not decrements auto incremented column?回滚事务不递减自动递增的列?
【发布时间】: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


    【解决方案1】:

    是的,一旦分配,SQL Server 将不会“重复使用”身份号码。而且,不保证值会是consecutive

    事务中的连续值 - 插入事务 不保证多行获得行的连续值 因为表上可能会发生其他并发插入。如果值 必须是连续的,那么事务应该使用排他锁 在表上或使用 SERIALIZABLE 隔离级别。

    您可以使用DBCC CHECKIDENT 更改标识值,但最好将它们视为唯一的系统 ID,不要假设任何关于顺序的内容。

    您可能还想看看 SEQUENCE,它比 IDENTITY 有一些优势。

    【讨论】:

    • 任何想法 - 将行插入实时数据库表的最佳做法是什么?
    • 这取决于场景。有用于批量插入的 ETL 工具(例如 SSIS)。应用程序可以使用实体框架、OLE DB、JDBC...最好单独提出问题并更具体。
    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2018-04-10
    • 2011-09-22
    相关资源
    最近更新 更多