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

ckp*_*r02 4 sql-server identity-column

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

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

Gra*_*ush 7

DBCC CHECKIDENT (<table name>, reseed, 1000) 应该做的伎俩.

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

这篇文章解释了一下.

  • 我在MSSQL2014上的测试显示,如果你将其播种到1000,则下一个条目将是1000,而不是1001.这在逻辑上与第一个条目1而不是2的标识(1,1)一致. (3认同)

Rob*_*ino 6

基于 GrandMasterFlush 的答案,这里是我用来实现这种“截断但保留种子”功能的脚本,假设您的 id 是bigint.

declare @id bigint
select @id = IDENT_CURRENT('MyTable')
print(@id)
truncate table MyTable
dbcc checkident (MyTable, reseed, @id)
Run Code Online (Sandbox Code Playgroud)