Edit:
Проведя несколько часов, сравнивающих целые отвалы страницы, я понял, что это легкий путь, и я должен, остался на DMVs.
Значение сохраняет резервную копию/восстановление, что является четким указанием на то, что оно хранится - я сбросил все страницы в БД и не смог найти местоположение/изменение, когда была добавлена запись. Сравнение 200k строк дампов страниц не весело.
Я использовал выделенную консоль администратора. Я взял дамп каждой открытой внутренней таблицы, вставленной в строку, а затем сделал еще один дамп системных таблиц. Обе эти свалки были одинаковыми, что указывает на то, что, пока он выжил и поэтому должен храниться, он не подвергается воздействию даже на этом уровне.
Итак, пройдя круг в кругу, я понял, что у DMV есть ответ.
create table foo (MyID int identity not null, MyField char(10))
insert into foo values ('test')
go 10
-- Inserted 10 rows
select Convert(varchar(8),increment_value) as IncrementValue,
Convert(varchar(8),last_value) as LastValue
from sys.identity_columns where name ='myid'
-- insert another row
insert into foo values ('test')
-- check the values again
select Convert(varchar(8),increment_value) as IncrementValue,
Convert(varchar(8),last_value) as LastValue
from sys.identity_columns where name ='myid'
-- delete the rows
delete from foo
-- check the DMV again
select Convert(varchar(8),increment_value) as IncrementValue,
Convert(varchar(8),last_value) as LastValue
from sys.identity_columns where name ='myid'
-- value is currently 11 and increment is 1, so the next insert gets 12
insert into foo values ('test')
select * from foo
Result:
MyID MyField
----------- ----------
12 test
(1 row(s) affected)
Просто потому, что строки были удалены, последнее значение было не сбрасывается, поэтому последнее значение + приращение должно быть правильный ответ.
Также собираюсь написать эпизод в своем блоге.
Ох, и короткая стрижка, чтобы все это:
select ident_current('foo') + ident_incr('foo')
Так что на самом деле оказываются просто - но все это предполагает никто не использовал свой идентификатор в то время как вы получили его обратно. Хорошо для расследования, но я бы не хотел использовать его в коде.
Сделка не будет откатывать идентификационный счетчик, и всегда существует риск того, что какой-либо другой поток использует число, которое, по вашему мнению, вы получите позже. – idstam
Спасибо за это @idstam Я подозревал это. – iWeasel