我正在使用以下代码来重置表的身份:
DBCC CHECKIDENT('TableName', RESEED, 0)
在大多数情况下,这都可以正常工作,在第一个插入操作中,我确实将1插入了ID列。但是,如果我删除数据库并使用我编写的脚本重新创建它,然后调用DBCC CHECKIDENT,则插入的第一项的ID为0。有任何想法吗?
编辑:经过研究,我发现我没有正确阅读documentation-“当前标识值设置为new_reseed_value。如果自创建以来没有将任何行插入表中,则在执行DBCC之后插入第一行CHECKIDENT将使用new_reseed_value作为标识。否则,插入的下一行将使用new_reseed_value + 1。
最佳答案
正如您在问题中指出的那样,它是documented behavior。我仍然觉得很奇怪。我用来重新填充测试数据库,即使我不依赖标识字段的值,当从头开始第一次填充数据库以及删除所有数据并再次填充之后,具有不同的值还是有点令人讨厌。
一种可能的解决方案是使用截断来清理表而不是删除表。但是然后您需要删除所有约束并在之后重新创建它们
这样,它始终表现为新创建的表,因此无需调用DBCC CHECKIDENT。第一个标识值将是表定义中指定的值,并且无论是第一次插入数据还是第N个数据都将相同。
关于sql - DBCC CHECKIDENT将标识设置为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/472578/