截断表后SQL Server继续标识计数

时间:2013-07-01 15:47:27

标签: sql-server identity-column

我似乎记得在 MySQL 中截断表时,自动递增的索引字段将从中断处继续。因此,如果所述表被截断,最高id为100,则截断后的下一个id将为101。

有没有办法在 SQL Server 中执行此操作?我用超过1000行截断了我的表,但在截断后,下一个新ID在我的标识列中返回到1。我想继续。

3 个答案:

答案 0 :(得分:7)

DBCC CHECKIDENT (<table name>, reseed, 1000)应该可以解决问题。

请注意,上面显示的重新设定意味着下一个数字将是1001,如果您希望下一个ID为1000,则设置为999.

This article解释了一点。

答案 1 :(得分:4)

来自MSDN

  

如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果未定义种子,则使用默认值1。要保留身份计数器,请改用DELETE。

如果您设置为截断表格,则可以在截断前手动查找最大ID,然后使用DBCC CHECKIDENT重新设置表格。

答案 2 :(得分:2)

基于GrandMasterFlush的答案,这是一个我用来实现这个目的的脚本&#34;截断但保留种子&#34;功能,假设您的ID为bigint

declare @id bigint
select @id = IDENT_CURRENT('MyTable')
print(@id)
truncate table MyTable
dbcc checkident (MyTable, reseed, @id)