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

表中的id是这样的:

99 100 101 1200 1201...

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


当前回答

这个呢?

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;

其他回答

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

DBCC CHECKIDENT (mytable, RESEED, 0)

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

这个呢?

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;

如果你只是想在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开始。

我知道这是一个老问题。然而,我正在为MySQL寻找类似的解决方案,这个问题出现了。

对于那些正在寻找MySQL解决方案的人,你需要运行这个查询:

// important!!! You cannot reset the counter to a value less than or equal to the value that is currently in use. For both InnoDB and MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum AUTO_INCREMENT column value plus one.
   
ALTER TABLE <your-table-name> AUTO_INCREMENT = 100

文档

如果你正在使用MySQL,试试这个:

ALTER TABLE tablename AUTO_INCREMENT = 1