5

在 SQL Server 2012 中,以下查询从 2 而不是 1 为标识列设定种子myTable_id。为什么?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

备注

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

在此处输入图像描述

4

4 回答 4

5

文档

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

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

于 2017-08-10T15:55:57.407 回答
4

这里的答案没有什么不好,但困惑来自微软的方法本身。

我觉得:

DBCC CHECKIDENT(myTable, RESEED, 0)

应该在任何地方都有相同的行为:

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

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

于 2019-01-05T15:17:42.187 回答
3

按预期工作另请参阅
https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkident-transact-sql#examples

值 1 表示当前标识将从 1 开始,下一个标识将从 2 开始

要从 1 开始,您应该这样做

DBCC CHECKIDENT(myTable, RESEED, 0)
于 2017-08-10T15:57:03.003 回答
0

这对我有用:

  DBCC CHECKIDENT ([Table], RESEED, 0)
  DBCC CHECKIDENT ([Table], RESEED)
于 2021-06-29T13:07:39.893 回答