我使用3-4表,并在所有这些表中使用主值的自动增量。我希望所有的表都从1开始
例如,student表id从1开始,Registration表从1开始。
现在,自动增量从学生表的最后一个id开始。例如,学生表中的LastRow ID为100,因此Registeration将从101开始。我要从1开始怎么做。
发布于 2013-11-27 08:44:13
正如艾纳夫所说,这个问题要小心处理!
如果您的学生表是空的,并且您正试图因为测试而重置计数器,或者因为每年删除数据库等等,那么您可以使用DBCC化学命令(如果您使用的是MySql ),或者您可以对MySql http://dev.mysql.com/doc/refman/5.0/en/alter-table.html使用alter (Auto_increment)。
但是要小心,因为任何外键依赖项都必须重新设置--您可能会遇到各种各样的麻烦。
下面是一个快速测试场景:
--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对于您的情况,您将使用:('Student',RESEED,0);
再次谨慎地处理此命令,并在运行该命令之前检查对此主键的所有引用。确保您也备份了数据库!
发布于 2013-11-27 08:25:47
如果您已经有一些值(表不为空),那么这是不可能的。可以清空所有表并运行DBCC CHECKIDENT命令来重置自动增量主键的值并从1重新启动。
DBCC CHECKIDENT ("YourTableNameHere", RESEED, number);如果number =0,那么在下一个插入中自动增量字段将包含值1
如果number = 101,那么在下一个插入中,自动增量字段将包含值102。
但请注意,此命令只是重置标识列的值,它不检查冲突。我的意思是,如果值1已经存在,那么在试图插入该表时会出现错误。
发布于 2013-11-27 08:13:51
我认为这在大多数RDBMS中是不可能的。即使是这样,我也不会建议您这样做--如果表中已经有行,则应该从MAX_ROWS + 1开始。
https://stackoverflow.com/questions/20236984
复制相似问题