SQL Server ID 自增不连续、删除数据后再次插入ID不连续

背景:当我们使用SQL Server 进行数据库操作时,经常会把 Table 的 ID 设置成主键自增 PRIMARY KEY IDENTITY,但是这样做存在一个问题就是 当我们删除一行数据后,再次添加后会看到ID的顺序不连续,如下所示。

问题还原

创建表 并添加数据

DROP TABLE IF EXISTS Person 
create table Person(
	PersonId int PRIMARY KEY IDENTITY ,
    PersonName NVARCHAR(255) not null unique,
	PersonDesc NVARCHAR(255) not null unique
)

insert into Person values('zhangsan','My name is zhangsan')
insert into Person values('lisi','My name is lisi')

查询一下:
在这里插入图片描述
当我们删除 PersonId=2 的值后 ,添加一条 wangwu 的数据 后 PersonId=3 不是 PersonId=2 !!!
在这里插入图片描述
解决方法: 获取到当前表的最后一条记录的ID值为a,将Identity 从a重新开始计算,具体语句如下所示

DECLARE @A INT
SET @A=(SELECT TOP 1 PersonId FROM Person ORDER BY PersonId DESC)
dbcc checkident('Person',reseed,@A)
insert into Person values('wangwu','My name is wangwu')

在这里插入图片描述
重新验证之后,发现问题解决,ID 连续!!

参考文章:
DBCC CHECKIDENT (Transact-SQL)

其中 DBCC 的具语法如下

-- Syntax for SQL Server and Azure SQL Database  

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

在这里插入图片描述

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值