2013-11-27 104 views
0

我正在使用3-4個表格,並在所有這些表格上使用自動增量。我想所有的表開始與1SQL Server自動增量

例如student表ID開始從1,和Registration表從1

眼下發生的事情自動增量開始與學生表的最後一個ID開始。例如,學生表中的LastRow ID爲100,所以Registeration將從101開始。我希望它從1開始如何做到這一點。

+0

你嘗試過什麼嗎?你爲什麼要這樣做?我想所有的表都是空的,因爲如果已經有一些值,首先插入的主鍵已經有值1,所以你不能重複這個值。 – Yaroslav

+0

是學生表空嗎? – sumit

回答

0

正如Einav所說,這個問題要謹慎處理!

如果您的學生表爲空,並且您正在嘗試重置計數器是因爲測試或每年因數據庫擦除等原因,則可以使用DBCC CHECKIDENT命令(如果您使用的是MS SQL Server)或者你可以使用改變表(auto_increment)爲MySql http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

但要小心,因爲任何外鍵的依賴關係也必須重置 - 你可能會遇到各種麻煩。

這裏是一個快速測試場景:

--Test variables & environment 
DECLARE @TimeParam AS DATETIME 
CREATE TABLE #Downtime (ID int identity, initial varchar(1)) 
INSERT INTO #Downtime VALUES('a') 
INSERT INTO #Downtime VALUES('b') 
INSERT INTO #Downtime VALUES('c') 
INSERT INTO #Downtime VALUES('d') 
INSERT INTO #Downtime VALUES('e') 
INSERT INTO #Downtime VALUES('f') 
INSERT INTO #Downtime VALUES('g') 
INSERT INTO #Downtime VALUES('h') 
INSERT INTO #Downtime VALUES('i') 
INSERT INTO #Downtime VALUES('j') 

--Queries 
DBCC CHECKIDENT (#Downtime) 
SELECT ID, initial FROM #Downtime 
DELETE FROM #Downtime 
DBCC CHECKIDENT (#Downtime, RESEED, 0) 
INSERT INTO #Downtime VALUES('k') 
SELECT ID, initial FROM #Downtime 
DROP TABLE #Downtime 

--results (first select) 
ID initial 
1 a 
2 b 
3 c 
4 d 
5 e 
6 f 
7 g 
8 h 
9 i 
10 j 

--results (second select) 
ID initial 
2 j 

對於你的情況,你可以使用: DBCC CHECKIDENT( '學生',RESEED,0);

再次謹慎處理此命令,並在運行命令之前檢查對此主鍵的所有引用。確保你已經備份了數據庫!

+1

Reseeding爲1,第一次插入將添加標識值2,而不是1。 – Yaroslav

+0

謝謝@Yaroslav,我一定是在自動駕駛儀上工作......複製並粘貼錯誤 - 回答改變了。 – Mack

1

我不認爲這在大多數RDBMS中是可行的。 就算是,我不會建議你這樣做 - 如果已經有表中的行,你應該用MAX_ROWS啓動+ 1

1

開始用1種:

DBCC CHECKIDENT (students, RESEED, 0) 

注意: 如果你這樣做,你必須確保表格是空的

3

如果你已經有一些值(表格不是空的),那麼這是不可能的。你可以清空所有表並運行DBCC CHECKIDENT command重置自動增量主鍵的值,從1

DBCC CHECKIDENT ("YourTableNameHere", RESEED, number); 

如果number = 0,那麼在接下來的插入自動遞增字段將包含值1

重啓

如果number = 101,然後在接下來的插入自動遞增字段將包含價值102

但要注意,這個命令只是重置不檢查衝突標識列,的價值。我的意思是,如果值1已經存在,那麼在嘗試插入該表時會出現錯誤。