我从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?
当前回答
删除数据库中的所有表并重新播种。
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.
其他回答
重置数据库中的每个键,从最后一个最高键的最大值开始自动递增:
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)'
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED)'
执行以下命令重新播种mytable,使其从1开始:
DBCC CHECKIDENT (mytable, RESEED, 0)
在联机书籍(BOL, SQL帮助)中阅读它。还要注意,你的记录不要高于你所设置的种子。
如果你正在使用MySQL,试试这个:
ALTER TABLE tablename AUTO_INCREMENT = 1
我想明白了。它是:
DBCC CHECKIDENT ('tablename', RESEED, newseed)
我想添加这个答案是因为DBCC checkident -方法在对表使用模式时会产生问题。用这个来确定:
DECLARE @Table AS NVARCHAR(500) = 'myschema.mytable';
DBCC CHECKIDENT (@Table, RESEED, 0);
如果需要检查操作是否成功,请使用
SELECT IDENT_CURRENT(@Table);
在上面的例子中应该输出0。