标识列在添加新行时跳过某些值

时间:2014-04-26 09:04:23

标签: sql sql-server ssms

我有一个包含56行的表格。添加新行从ID 59开始。

如何继续使用ID 57?

3 个答案:

答案 0 :(得分:2)

当您从表中删除列或将标识更改为更高的数字时,会发生这种情况。

可以重置身份,但除非你有充分的理由这样做(很好的理由可能是删除了大部分的表内容),我不建议这样做。

可以找到有关如何重新设置身份的一些详细信息here

使用它的方法是

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

其中new_reseed_value对于这种特定情况将为57(即身份将从57开始)。但是,请注意,如果表格中的某些内容ID高于57,则会失败。

或者,您可以使用:

SET IDENTITY_INSERT Table_Name ON
INSERT INTO Table_Name(ID, Other_Columns,You_Are_Inserting,You_Must_Specify_All_Of_Them)
VALUES (57, 'SomeData','OtherData',...)
SET IDENTITY_INSERT Table_Name OFF

这将允许您通过指定标识列值进行插入而不重新播种。此外,请勿插入比当前标识更高的值,否则您将无法插入。

答案 1 :(得分:0)

这是IDENTITY列的预期行为。如果你想要连续的数字,你不应该使用它们,因为每次插入新行时身份值都会增加,但如果删除最后一行,会减少,也不会减少如果您开始一个事务,插入一个新行,然后回滚该事务。

您可以使用DBCC CHECKIDENT命令更改标识值,但实际上,您应该将列更改为常规非标识列,并从您自己的代码中管理值。

答案 2 :(得分:0)

您需要为特定表启用 Identity_insert

SET IDENTITY_INSERT YourTableName ON

Insert into YourTableName (IDField,rest of the column names)
values (57, rest of the column values)

SET IDENTITY_INSERT YourTableNAme OFF