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