編集:
ページ全体のダンプを比較する時間数を過ごした後、私はもっと簡単な方法があり実現し、私はのDMVにとどまったの必要があります。
この値は、保存されていることを明確に示しています。データベースにすべてのページをダンプし、レコードが追加されたときの場所/変更を見つけることができませんでした。ページの200kラインダンプを比較するのは楽しいことではありません。
専用の管理コンソールを使用していましたが、1行挿入されたすべての内部テーブルをダンプしてから、システムテーブルをさらにダンプしました。両方のダンプは同一であり、生存している間に保存しなければならないが、そのレベルでさえも露出していないことを示している。
サークル内を回った後、私は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')
だから、実際に簡単であることが判明 - が、これは、すべてあなたが戻ってそれを得ながら、誰もが自分のIDを使用していない前提としています。調査のために良いですが、私はコードでそれを使用したくありません。
トランザクションはIDカウンタをロールバックせず、後で取得すると思われる番号を他のスレッドが使用している可能性があります。 – idstam
ありがとう、この@idstam 私はこれを疑った。 – iWeasel