Можем ли мы вернуться к исходному состоянию после того, как использовали DBCC CHECKIDENT для перезапуска счетчика столбцов идентификаторов?

В настоящее время на некоторых операциях я должен удалить старые данные и вставить новые. Но я заметил, что, несмотря на удаление данных, столбец идентификаторов не сбрасывался и продолжал свое последнее максимальное значение. Таким образом, я использовал DBCC CheckIdent для достижения того же самого, что происходит в транзакции. Могу ли я откатить транзакцию обратно в исходное состояние? Может ли DBCC CHECKIDENT создать какие-либо проблемы? Пожалуйста, руководство ...

Ответы на вопрос(1)

Решение Вопроса

Тестовый код ниже показывает, что действие DBCC можно откатить:

create table #t
(id int identity, val1 int)
go

insert #t (val1)
values (1),(2),(3)

select MAX(id) AS before from #t

begin tran 

    delete #t

    dbcc checkident (#t, reseed,0)

    select MAX(id) AS inside_tran from #t   

rollback

select MAX(id) as after_rollback from #t
dbcc checkident (#t, noreseed)
 Ed Harper05 окт. 2010 г., 10:19
@VladV - отредактировано с учетом ваших наблюдений
 VladV05 окт. 2010 г., 09:49
ИМХО, этот код не доказывает, что значение идентификатора было откатано. Показывает только откат удаления строк из #t.

Ваш ответ на вопрос