我从SQL Server数据库的一个表中删除了一些记录。
表中的id是这样的:
99 100 101 1200 1201...
我想删除后来的记录(ID >1200),然后我想重置自动增量,以便下一个自动生成的ID将是102。所以我的记录是顺序的,有办法做到这一点在SQL Server?
我从SQL Server数据库的一个表中删除了一些记录。
表中的id是这样的:
99 100 101 1200 1201...
我想删除后来的记录(ID >1200),然后我想重置自动增量,以便下一个自动生成的ID将是102。所以我的记录是顺序的,有办法做到这一点在SQL Server?
当前回答
如果你只是想在SQL服务器中重置主键/序列,以一个你想要的序列开始,这里有一个解决方案-
IDs:
99 100 101 1200 1201...
删除id为>= 1200的行。(如果你有外键约束绑定到这些必须处理或删除,也能够删除这个,请小心。) 现在你要确保你知道MAX ID,以确保:
(SELECT MAX(your_column_name) FROM your_table) + 1;
(注:+1为最大值后开始ID序列)
重新启动你的序列:
execute ('alter sequence your_column_name restart with ' + @max_id);
(注:with后面必须有空格) 现在新的记录将以102作为ID开始。
其他回答
删除数据库中的所有表并重新播种。
USE [DatabaseName]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0
Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back
-- You may ignore the errors that shows the table without Auto increment field.
如果你正在使用MySQL,试试这个:
ALTER TABLE tablename AUTO_INCREMENT = 1
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)
如果number = 0,那么在下一次插入时,自动递增字段将包含值1
如果number = 101,那么在下一次插入时,自动递增字段将包含值102
一些额外的信息…可能对你有用 在上述查询中给出自动递增数之前,必须确保现有表的自动递增列包含的值小于该数。
要从表(table1)中获取列(column_name)的最大值,可以使用以下查询
SELECT MAX(column_name) FROM table1
半保证没有白痴:
declare @max int;
select @max = max(key) from table;
dbcc checkident(table,reseed,@max)
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
重置数据库中的每个键,从最后一个最高键的最大值开始自动递增:
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)'
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED)'