5

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

有没有办法在SQL Server中做到这一点?我用超过 1000 行截断了我的表,但是在截断下一个新 id 后,我的身份列中又回到了 1。我希望它继续下去。

4

3 回答 3

10

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

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

这篇文章解释得更多。

于 2013-07-01T15:51:49.633 回答
7

基于 GrandMasterFlush 的答案,假设您的 id 是bigint.

declare @id bigint
select @id = IDENT_CURRENT('MyTable')
print(@id)
truncate table MyTable
dbcc checkident (MyTable, reseed, @id)
于 2018-03-28T10:06:22.067 回答
4

来自MSDN

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

如果您在截断表时设置,您可以在截断之前手动查找最大 ID,然后使用DBCC CHECKIDENT.

于 2013-07-01T15:51:58.503 回答