SqlServer 重置标识值

本文详细介绍了如何在SQLServer中使用DBCC CHECKIDENT命令来重置标识列的当前值,尤其是在表中出现不连续记录时如何正确地进行重置以避免后续插入时产生主键冲突的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除 SQL Server 表记录后,想在新插入记录时,标识从 1 开始编号。

dbcc checkident('表名', RESEED, 0)


注意第三个参数是 0:由于这个表曾经有个记录,那么新插入第一条记录时,其标识就是 0 的下一个数,即 1;如果这个表从来没有插入过记录,那么新插入第一条记录时,其标识就是 0。

现在有这么一种捣蛋情况:

表中有不连续的记录,其标识值分别是 2、4,运行dbcc checkident('表名', RESEED, 0) 后:

插入一条记录,成功,标识值为 1。
再插入一条记录,很可能失败,为什么很可能失败呢,因为标识就是用来唯一标识一条记录的,那么您肯定将其设置为主键了,标识 2 的记录已经存在了,再插入就失败了。
再插入一条记录,成功,标识值为 3。
再插入一条记录,很可能失败……
再插入一条记录,成功,标识为 5。




sql 帮助




语法

DBCC CHECKIDENT
(
        table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]


参数
table_name
是要对其当前标识值进行检查的表名。指定的表必须包含标识列。表名必须符合标识符规则。

NORESEED
指定不应更改当前标识值。

RESEED
指定应该更改当前标识值。

new_reseed_value
用作标识列的当前值的新值。

WITH NO_INFOMSGS
取消显示所有信息性消息。

结果集
无论是否为包含标识列的表指定了任何选项,DBCC CHECKIDENT 都返回以下信息(返回值可能有所不同):

复制代码
Checking identity information: current identity value '290', current column value '290'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


注释
对当前标识值所做的具体更正取决于参数规范。

DBCC CHECKIDENT 命令  标识更正或所做的更正 
DBCC CHECKIDENT ( table_name, NORESEED )
不重置当前标识值。DBCC CHECKIDENT 将返回标识列的当前标识值和当前最大值。如果这两个值不相同,则应重置标识值,以避免值序列中的潜在错误或空白。

DBCC CHECKIDENT ( table_name )

或者

DBCC CHECKIDENT ( table_name, RESEED )
如果表的当前标识值小于标识列中存储的最大标识值,则使用标识列中的最大值对其进行重置。

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
将当前标识值设置为 new_reseed_value。如果自从创建表以来未在表中插入任何行,或者已使用 TRUNCATE TABLE 语句删除所有行,则在运行 DBCC CHECKIDENT 之后插入的第一行将使用 new_reseed_value 作为标识。否则,插入的下一行将使用 new_reseed_value + 当前增量值。

如果该表不为空,那么将标识值设置为小于标识列中的最大值的数字时,将会出现下列情况之一:

如果标识列中存在 PRIMARY KEY 或 UNIQUE 约束,则随后在表中执行插入操作时将生成错误消息 2627,原因是生成的标识值将与现有值冲突。


如果不存在 PRIMARY KEY 或 UNIQUE 约束,则随后的插入操作将产生重复的标识值。

 


转载于:https://www.cnblogs.com/whz881027/articles/2105992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值