簡體   English   中英

SQL Server自動增量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM