[英]SQL Server Auto-increment
我正在使用3-4個表,並在所有表中對primary ey使用自動增量。 我希望所有表格都以1開頭
例如, student
表ID從1開始, Registration
從1開始。
現在,會發生什么情況,自動遞增將從學生表的最后一個ID開始。 例如,學生表中的LastRow ID為100,因此Registeration
將從101開始。我希望它從1開始如何進行。
如果已經有一些值(表不為空),那么這是不可能的。 您可以清空所有表並運行DBCC CHECKIDENT命令以重置自動增量主鍵的值,然后從1重新開始。
DBCC CHECKIDENT ("YourTableNameHere", RESEED, number);
如果number
= 0,則在下一個插入中,自動遞增字段將包含值1
如果number
= 101,則在下一個插入中,自動遞增字段將包含值102
但是請注意,此命令只是重置標識列的值, 它不會檢查沖突 。 我的意思是,如果值1已經存在,則嘗試在該表上插入時將出現錯誤。
我認為這在大多數RDBMS中都是不可能的。 即使是,我也不建議您這樣做-如果表中已經有行,則應以MAX_ROWS + 1開頭。
從1開始使用種子:
DBCC CHECKIDENT (students, RESEED, 0)
注意:如果要這樣做,必須確保表格為空
正如Einav所說,要謹慎處理這個問題!
如果您的學生表為空,並且由於測試或由於數據庫的年度擦除等原因而試圖重置計數器,則可以使用DBCC CHECKIDENT命令(如果使用的是MS SQL Server),也可以對MySql使用alter table(auto_increment) 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);
再次謹慎處理此命令,並在運行命令之前檢查對該主鍵的所有引用。 確保您也已經備份了數據庫!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.