当前位置:  开发笔记 > 后端 > 正文

删除后重置SQL Server中的AutoIncrement

如何解决《删除后重置SQLServer中的AutoIncrement》经验,为你挑选了6个好方法。

我从SQL Server数据库中的表中删除了一些记录.现在ID从101到1200.我想再次删除记录,但我希望ID能够回到102.有没有办法在SQL Server中执行此操作?



1> Robert Wagne..:

发出以下命令重新设置mytable以从1开始:

DBCC CHECKIDENT (mytable, RESEED, 0)

在线上书籍(BOL,SQL帮助)中阅读它.另外请注意,您没有比您设置的种子更高的记录.


"DBCC CHECKIDENT(table_name)"将种子设置为表中的最高标识,而不是"小心"
@ user1027167不,你的答案对我不起作用.它一直在增加内部保存的最高ID.在我的情况下,我必须明确使用"RESEED,18"来获得"19"作为下一个ID.没有它继续愉快地增加"29".
...因为这些记录的ID会很高兴再次被重复使用,造成一个糟糕的混乱.
实际上,为了从1开始ID,你需要使用0:`DBCC CHECKIDENT(mytable,RESEED,0)`

2> Fathah Rehma..:
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)

如果number = 0,则在下一个插入中,自动增量字段将包含值1

如果number = 101,则在下一个插入中,自动增量字段将包含值102


一些额外的信息...可能对您有用在上面的查询中

给出自动增量之前number,您必须确保现有表的自动增量列包含的值小于该值number.

要从表(table1)获取列(column_name)的最大值,可以使用以下查询

 SELECT MAX(column_name) FROM table1



3> user423430..:

半白痴:

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


@ user1027167文档说'如果表的当前标识值小于标识列中存储的最大标识值'; 删除数据后不包括清理(重新使用id - 通常是一个坏主意).在SQL 2008上验证

4> xaa..:

试试这个:

ALTER TABLE tablename AUTO_INCREMENT = 1


如果我没错,那么答案对于mysql来说是好的.

5> jumbojs..:

我想到了.它的:

 DBCC CHECKIDENT ('tablename', RESEED, newseed)



6> BMG..:

删除并重新设定数据库中的所有表.

    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.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有