在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
备注:
答案 0 :(得分:2)
来自docs:
种子值是插入到表中的第一行的标识列中的值。所有后续行都包含当前标识值加上增量值,其中当前标识值是为表或视图生成的最后一个标识值。
因此,如果从10开始播种,则要插入的下一个值将为11。
答案 1 :(得分:0)
值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)