我正在使用3-4个表格,并在所有这些表格上使用自动增量。我想所有的表开始与1SQL Server自动增量
例如student
表ID开始从1,和Registration
表从1
眼下发生的事情自动增量开始与学生表的最后一个ID开始。例如,学生表中的LastRow ID为100,所以Registeration
将从101开始。我希望它从1开始如何做到这一点。
我正在使用3-4个表格,并在所有这些表格上使用自动增量。我想所有的表开始与1SQL Server自动增量
例如student
表ID开始从1,和Registration
表从1
眼下发生的事情自动增量开始与学生表的最后一个ID开始。例如,学生表中的LastRow ID为100,所以Registeration
将从101开始。我希望它从1开始如何做到这一点。
正如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);
再次谨慎处理此命令,并在运行命令之前检查对此主键的所有引用。确保你已经备份了数据库!
我不认为这在大多数RDBMS中是可行的。 就算是,我不会建议你这样做 - 如果已经有表中的行,你应该用MAX_ROWS启动+ 1
开始用1种:
DBCC CHECKIDENT (students, RESEED, 0)
注意: 如果你这样做,你必须确保表格是空的
如果你已经有一些值(表格不是空的),那么这是不可能的。你可以清空所有表并运行DBCC CHECKIDENT command重置自动增量主键的值,从1
DBCC CHECKIDENT ("YourTableNameHere", RESEED, number);
如果number
= 0,那么在接下来的插入自动递增字段将包含值1
如果number
= 101,然后在接下来的插入自动递增字段将包含价值102
但要注意,这个命令只是重置不检查冲突标识列,的价值。我的意思是,如果值1已经存在,那么在尝试插入该表时会出现错误。
你尝试过什么吗?你为什么要这样做?我想所有的表都是空的,因为如果已经有一些值,首先插入的主键已经有值1,所以你不能重复这个值。 – Yaroslav
是学生表空吗? – sumit