我从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.
其他回答
我想明白了。它是:
DBCC CHECKIDENT ('tablename', RESEED, newseed)
You do not want to do this in general. Reseed can create data integrity problems. It is really only for use on development systems where you are wiping out all test data and starting over. It should not be used on a production system in case all related records have not been deleted (not every table that should be in a foreign key relationship is!). You can create a mess doing this and especially if you mean to do it on a regular basis after every delete. It is a bad idea to worry about gaps in you identity field values.
这个呢?
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
如果你只是想在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开始。