我从SQL Server数据库的一个表中删除了一些记录。

表中的id是这样的:

99 100 101 1200 1201...

我想删除后来的记录(ID >1200),然后我想重置自动增量,以便下一个自动生成的ID将是102。所以我的记录是顺序的,有办法做到这一点在SQL Server?


当前回答

执行以下命令重新播种mytable,使其从1开始:

DBCC CHECKIDENT (mytable, RESEED, 0)

在联机书籍(BOL, SQL帮助)中阅读它。还要注意,你的记录不要高于你所设置的种子。

其他回答

删除数据库中的所有表并重新播种。

    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.

这个呢?

ALTER TABLE `table_name`
  MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;

这是一种快速而简单的方法,可以将自动增量更改为0或任何您想要的数字。我通过导出数据库并自己阅读代码来解决这个问题。

你也可以这样写,使它成为一个单行解决方案:

ALTER TABLE `table_name` MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;

半保证没有白痴:

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

我想明白了。它是:

 DBCC CHECKIDENT ('tablename', RESEED, newseed)

基于已接受的答案,对于那些遇到类似问题的人,具有完整的模式限定:

([MyDataBase]。[MySchemaName]。[MyTable])……导致一个错误,您需要在该DB的上下文中

也就是说,下面的代码会抛出一个错误:

DBCC CHECKIDENT ([MyDataBase].[MySchemaName].[MyTable], RESEED, 0)

用单引号括起全限定表名:

DBCC CHECKIDENT ('[MyDataBase].[MySchemaName].[MyTable]', RESEED, 0)