Транзакция отката не уменьшает автоматически увеличивающийся столбец?

T-SQL:

BEGIN TRANSACTION

Insert (col1,col2,col3)

values (1,2,3)

После выполнения вышеуказанного t-sql, а затем ROLLBACK TRANSACTION MS-SQL не уменьшает автоматически увеличивающийся столбец. Есть идеи, почему?

Я нашел ответ здесь. Этот ответ применим к MS-SQL?


person shaadi    schedule 22.06.2017    source источник


Ответы (1)


Да, SQL-сервер не будет «повторно использовать» однажды присвоенные идентификационные номера. Более того, не гарантируется, что значения будут последовательно:

Последовательные значения в транзакции — транзакция, вставляющая несколько строк, не гарантирует получения последовательных значений для строк, поскольку в таблице могут происходить другие одновременные вставки. Если значения должны быть последовательными, транзакция должна использовать монопольную блокировку таблицы или использовать уровень изоляции SERIALIZABLE.

Вы можете использовать DBCC CHECKIDENT, чтобы изменить значения идентификаторов, но лучше рассматривать их как уникальные системные идентификаторы и не делать никаких предположений о порядке.

Вы также можете взглянуть на ПОСЛЕДОВАТЕЛЬНОСТЬ, которая имеет некоторые преимущества перед IDENTITY.

person under    schedule 22.06.2017
comment
любая идея - как лучше всего вставлять строки в живую таблицу базы данных? - person shaadi; 22.06.2017
comment
это будет зависеть от сценария. Существуют инструменты ETL для пакетной вставки (например, SSIS). Приложения могут использовать структуру сущностей, OLE DB, JDBC... Лучше всего задать отдельный вопрос и быть более конкретным. - person under; 22.06.2017