IDENTITYの初期化について


DBCC CHECKIDENTでIDENTITYを再設定した場合、
テーブルをTRUNCATEした直後とそれ以外では値が異なってしまう。


TRUNCATEした直後だとRessedで指定した値が採番されるが、
DELETE等でクリアした場合はRessedで指定した値+1が採番される。


以下、再現するためのSQL


ダミーでテーブルを作成

CREATE TABLE hogetbl(
  [colid] [int] IDENTITY(3,1) NOT NULL,
  [col2]  [nchar](10) 
 ) ON [PRIMARY]

TruncateしたのちにDBCC CHECKIDENT

 TRUNCATE TABLE HOGETBL
 
 DBCC CHECKIDENT ('HOGETBL', RESEED, 100)
 INSERT INTO HOGETBL(COL2) VALUES('HOGE')
 SELECT * FROM HOGETBL


SELECTの結果(TRUNCATE)

colid  col2
--------------
100    hoge

DELETEしたのちにDBCC CHECKIDENT

 --DELETE前にレコードを追加しておく
 INSERT INTO HOGETBL(COL2) VALUES('HOGE')

 DELETE FROM HOGETBL

 DBCC CHECKIDENT ('HOGETBL', RESEED, 100)
 INSERT INTO HOGETBL(COL2) VALUES('HOGE')

 SELECT * FROM HOGETBL


SELECTの結果(DELETE)

colid  col2
--------------
101    hoge

動作確認環境:SQL Server2008 Enterprise Edition