2013-12-24 2 views
0

У меня есть транзакция, которая вставляет несколько строк в одну таблицу.Reseed IDENTITY к First в случае ROLLBACK

Скажем так: Моя таблица имеет максимальный идентификатор 100, а затем мне нужно вставить еще 100 строк, где на финише максимальный ID будет 200. Другие транзакции, ожидающие завершения моей транзакции, и они зарезервировали номер 201, независимо моя транзакция завершается успешно или нет.

Откат транзакция не помогает переустановке ID 100, потому что если я кладу заявление, тождественным вне сделку, другие сделки, имеют более высокий приоритет, и они уже зарезервированы номеру 201.

Осы на переустановку столбца идентификации т.е. 100, если мой откат транзакции, но до того, как другая транзакция займет следующий ID?

Надеюсь, я был достаточно ясен.

+1

Не используйте 'IDENTITY', если вам нужна последовательность без пробелов. Он не предназначен для этой цели. Зачем тебе это нужно? –

+0

Кроме того, на сервере Sql 2012 [столбцы IDENTITY будут увеличиваться на 1000 при перезапуске сервера] (http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value- Jump-Is) – stuartd

ответ

0

Я не думаю, что вы должны это сделать.

Я не уверен, как другие транзакции, ожидающие завершения вашей работы, зарезервированы 201. Они не знают, что используются тождества; они знают только, что они заблокированы.

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