我正在使用此代码重置表上的标识:

DBCC CHECKIDENT('TableName', RESEED, 0)

这在大多数情况下都很好,在我做的第一次插入时,我会在Id列中插入1.但是,如果我删除数据库并重新创建它(使用我编写的脚本),然后调用DBCC CHECKIDENT,那么插入的第一个项的ID将为0.

有什么 idea 吗?

EDIT:调查后我发现我没有正确阅读documentation-"当前标识值设置为新的_reseed_值.如果自创建表以来没有向表中插入任何行,则在执行DBCC CHECKIDENT后插入的第一行将使用新的_reseed_值作为标识.否则,插入的下一行将使用新的_reseed_值+1."

推荐答案

正如你在问题中指出的,这是documented behavior分.不过我还是觉得很奇怪.我使用重新填充测试数据库,尽管我不依赖标识字段的值,但在从头开始第一次填充数据库时,以及在删除所有数据并再次填充之后,使用不同的值有点烦人.

一个可能的解决方案是使用truncate来清理表,而不是删除.但是你需要go 掉所有的约束,然后重新创建它们

这样,它的行为总是像一个新创建的表,不需要调用DBCC CHECKIDENT.第一个标识值将是表定义中指定的标识值,无论是第一次还是第N次插入数据,该标识值都是相同的

Sql相关问答推荐

在SQL中查询SQL以返回NULLS和空数据集的 node 列表

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

SQL使最终结果显示两个表后的所有数据(匹配和不匹配)?

从以前的非空值行中获取值

替换上一个或下一个值中的空值并添加其价格日期

SQL:如何在表中同时使用GROUPING和CONDITION?

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

如何设计一个调用嵌套函数并仅在所有被调用的嵌套函数都提交时才提交的事务,例如,如果一个子函数失败则中止?

如何在多列上编写具有不同条件的查询?

不存在记录的国外关键点

在Oracle SQL中按月生成日期

根据时间值提取记录

如何在android房间中进行多个加入

使用 SQL 将列添加到 Access 数据库时出错

SQL Select 字母范围没有给我任何东西

SQL Server:时态表并在运行时添加计算列

REGEXP_SUBSTR使用方法

为重复的项目编号显示正在处理

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

使用 GROUP BY 时如何创建其他组?