我似乎记得在 MySQL 中截断表时,自动递增的索引字段将从中断处继续。因此,如果所述表被截断,最高id为100,则截断后的下一个id将为101。
有没有办法在 SQL Server 中执行此操作?我用超过1000行截断了我的表,但在截断后,下一个新ID在我的标识列中返回到1。我想继续。
答案 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)