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

时间:2017-08-10 15:53:28

标签: sql-server tsql sql-server-2012 dbcc

在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

备注

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

4 个答案:

答案 0 :(得分:2)

来自docs

  

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

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

答案 1 :(得分:0)

按预期工作也参见
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)

答案 2 :(得分:0)

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

我认为:

DBCC CHECKIDENT(myTable, RESEED, 0)

到处应该具有相同的行为:
1.在新创建的表上, 2.删除表记录后, 3.截断表格后 否则,我们需要在运行前检查表状态。

答案 3 :(得分:0)

这对我有用:

  DBCC CHECKIDENT ([Table], RESEED, 0)
  DBCC CHECKIDENT ([Table], RESEED)