背景

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

查询一下:

SQL Server ID 自增不连续、删除数据后再次插入ID不连续-LMLPHP
当我们删除 PersonId=2 的值后 ,添加一条 wangwu 的数据 后 PersonId=3 不是 PersonId=2

SQL Server ID 自增不连续、删除数据后再次插入ID不连续-LMLPHP
解决方法

dbcc checkident('table_name',reseed,new_reseed_value)
dbcc checkident('Person',reseed,1)

参数

table_name

是要检查其当前标识值的表的名称。指定的表必须包含标识列。表名必须遵循标识符规则。必须分隔两个或三个部分名称,例如"Person.AddressType"或[Person.AddressType]。

NORESEED

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

RESEED

指定应更改当前标识值。

new_reseed_value

是要用作标识列的当前值的新值。

WITH NO_INFOMSGS

禁止显示所有信息性消息。

高阶语法

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')
03-01 00:12