我似乎记得在MySQL中截断表时,自动递增的索引字段会在它停止的地方继续。因此,如果该表被截断,最高 id 为 100,则截断后的下一个 id 将是 101。
有没有办法在SQL Server中做到这一点?我用超过 1000 行截断了我的表,但是在截断下一个新 id 后,我的身份列中又回到了 1。我希望它继续下去。
我似乎记得在MySQL中截断表时,自动递增的索引字段会在它停止的地方继续。因此,如果该表被截断,最高 id 为 100,则截断后的下一个 id 将是 101。
有没有办法在SQL Server中做到这一点?我用超过 1000 行截断了我的表,但是在截断下一个新 id 后,我的身份列中又回到了 1。我希望它继续下去。
DBCC CHECKIDENT (<table name>, reseed, 1000)
应该做的伎俩。
请注意,上面显示的 reseed 表示下一个数字将是 1001,因此如果您希望下一个 ID 为 1000,请设置为 999。
这篇文章解释得更多。
基于 GrandMasterFlush 的答案,假设您的 id 是bigint
.
declare @id bigint
select @id = IDENT_CURRENT('MyTable')
print(@id)
truncate table MyTable
dbcc checkident (MyTable, reseed, @id)
来自MSDN:
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果没有定义种子,则使用默认值 1。要保留标识计数器,请改用 DELETE。
如果您在截断表时设置,您可以在截断之前手动查找最大 ID,然后使用DBCC CHECKIDENT
.