背景:当我们使用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 ]