DBCC CHECKIDENT(myTable, RESEED,1) 从 2 重新播种

nam*_*nam 5 t-sql sql-server dbcc sql-server-2012

在 SQL Server 2012 中,以下查询myTable_id从 2 而不是 1为标识列做种。为什么?myTable_id也是PK。

DELETE FROM myTable;
GO
SELECT * FROM myTable --0 rows are returned as expected
GO
DBCC CHECKIDENT(myTable, RESEED,1)
GO
INSERT INTO myTable(col1,col2,col3) SELECT FROM AnotherTable(col1,col2,col3)
GO
SELECT * FROM myTable --1005 rows are returned as expected, but identity value starts from 2
GO
Run Code Online (Sandbox Code Playgroud)

备注

  1. 插入的数据是对的,唯一的问题是新插入的数据从2开始而不是1开始。
  2. 在上面的 sql 代码中,如果我DBCC CHECKIDENT(myTable, RESEED,0)正确使用标识列从 1 开始。
  3. 以下是该myTable_id列的SSMS 快照:

在此处输入图片说明

Dav*_*idG 5

来自文档

种子值是插入到加载到表中的第一行的标识列中的值。所有后续行都包含当前标识值加上增量值,其中当前标识值是为表或视图生成的最后一个标识值。

因此,如果您从 10 开始播种,则下一个要插入的值将是 11。


小智 5

这里的答案并没有什么不好,但混乱来自于微软的方法本身。

我觉得:

DBCC CHECKIDENT(myTable, RESEED, 0)
Run Code Online (Sandbox Code Playgroud)

到处都应该有相同的行为:

  1. 在新创建的表上,
  2. 删除表记录后,
  3. 截断表后

否则,我们需要在运行之前检查表状态。