2016-10-29 38 views
2

我有一個主整數鍵值和它的自動增量一個一個的表,裏面的值一直很好,直到116,突然之後,它從10085繼續價值..重設主鍵DBCC CHECKIDENT安全行更大的ID

我不知道爲什麼,但也許我做了一個縮小數據庫。但無論如何,我知道關於DBCC CHECKIDENT命令。

我的問題是,如果我運行DBCC CHECKIDENT (mytable, RESEED, 116),它是否會損害我將來有100085年ID的行? 我的意思是當有一天我的行達到100084時,sql server會從其他id跳轉,還是會拋出異常來插入重複的id?

回答

2

不建議使用下面的命令

DBCC CHECKIDENT (mytable, RESEED, 116) 

,因爲它會拋出異常,當你行達到100084

欲瞭解更多信息,請閱讀以下Topic。它表示建議將所有行從表中刪除。如果你想用戶DBCC CHECKIDENT用於補種表

2

不要這樣做

一旦標識列來,則會引發重複鍵例外高達100084.

它不會奇蹟般地跳過以前生成的值以避免衝突。你可以很容易地看到這從下面的

CREATE TABLE mytable 
    (
    x INT IDENTITY PRIMARY KEY, 
    Y INT 
) 

INSERT INTO mytable 
      (Y) 
SELECT TOP (200) number 
FROM master..spt_values 

DELETE FROM mytable 
WHERE x BETWEEN 1 AND 150; 

DBCC CHECKIDENT (mytable, RESEED, 1) 

/*Works OK*/ 
INSERT INTO mytable 
      (Y) 
SELECT TOP (149) number 
FROM master..spt_values 

/*Error*/ 
INSERT INTO mytable 
      (Y) 
SELECT TOP (10) number 
FROM master..spt_values 

消息2627,級別14,狀態1,PRIMARY KEY約束 'PK__mytable__3BD019E5518439DD' 的第25行衝突。不能在對象'dbo.mytable'中插入重複的 鍵。重複的鍵值是(151)。 聲明已被終止。

相關問題