Gij*_*ijs 17 sql-server auto-increment alter-table identity ddl
我有一个带有 IDENTITY 列的表。在开发时,我不时删除行并再次添加它们。但是 IDENTITY 值总是不断增加并且当我再次添加它们时并没有从 1 开始。现在我的 id 从 68 -> 92 开始,这会导致我的代码崩溃。
如何重置 IDENTITY 值?
Kin*_*hah 31
您可以通过以下方式重置标识值
DBCC CHECKIDENT('tableName', RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
所以下次插入 TableName 时,插入的标识值将为 1。
当您从表中删除行时,它不会重置 Identity 值,但会不断增加它。就像你的情况一样。
现在,当您截断表时,它会将 Identity 值重置为其原始表的种子值。
请参阅:SQL SERVER – DELETE、TRUNCATE 和 RESEED Identity以获取详细示例以及对Truncate 和 Delete 之间差异的一些很好的解释
Aar*_*and 22
Kin 已经向您展示了如何重置 IDENTITY 值,但是在开发环境之外,当您真正删除所有数据时,为什么需要这样做?
我希望您在生产时不打算维护连续的 IDENTITY 值序列。我希望您不是真的编写代码来硬编码 IDENTITY 值。如果这些是有意义的 ID 值,那么您应该停止使用 IDENTITY 属性。
有一些事情可以防止这种情况发生:
简而言之,如果您关心差距或希望赋予这些值特定的含义,请停止使用 IDENTITY。删除并重新创建表,当您需要删除值并重新填充时,要么执行更新,要么使用该列的硬编码值执行插入。
顺便说一句,主键和身份不是一回事。身份列不是主键,除非您明确定义它,并且您当然可以拥有不是身份列的主键。