Editar:
Después de pasar un número de horas que comparan los vertederos de página entera, me di cuenta de que hay una manera más fácil y que debería de mantenido al DMV.
El valor sobrevive a una copia de seguridad/restauración, lo cual es una clara indicación de que está almacenado - Volqué todas las páginas en la base de datos y no pude encontrar la ubicación/alteración cuando se agregó un registro. Comparar 200,000 descargas de páginas en línea no es divertido.
Había utilizado la consola de administración dedicada. Tomé un volcado de cada una de las tablas internas expuestas insertadas en una fila y luego volví a tirar las tablas del sistema. Ambos volcados fueron idénticos, lo que indica que, aunque sobrevivió y, por lo tanto, debe almacenarse, no está expuesto ni siquiera en ese nivel.
Así que después de girar en círculo, me di cuenta de que el DMV sí tenía la respuesta.
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)
El hecho de que las filas consiguieron removidos, el último valor fue sin restablecerse, por lo que el último valor + Valor mínimo debería ser la respuesta correcta.
También voy a escribir el episodio en mi blog.
Ah, y el atajo para todo:
select ident_current('foo') + ident_incr('foo')
lo que en realidad resulta ser fácil - pero todo esto asume que nadie más ha utilizado su identificación mientras lo tienes de vuelta. Está bien para la investigación, pero no me gustaría usarlo en el código.
Una transacción no revertirá el contador de identidades y siempre existe el riesgo de que otro subproceso use el número que cree que obtendrá más adelante. – idstam
Gracias por este @idstam sospeché esto. – iWeasel