📜  sql server 2016 reseed identity - SQL (1)

📅  最后修改于: 2023-12-03 15:20:14.747000             🧑  作者: Mango

SQL Server 2016中重置IDENTITY

简介

IDENTITY是SQL Server中一种用于自动生成唯一标识符的特殊数据类型。IDENTITY列通常用于作为主键,在插入数据时自动递增。然而,在某些情况下需要重新设置IDENTITY列的初始值,通常是在数据表中删除记录后,重新插入数据时需要重新排序。在SQL Server 2016中,可以使用DBCC CHECKIDENT命令来重置IDENTITY列的当前最大值。

语法
DBCC CHECKIDENT ('table_name', RESEED, new_resed_value);

其中,table_name是IDENTITY列所在的数据表的名称;new_resed_value是新的IDENTITY初始值。如果不指定new_resed_value,则IDENTITY值将从1开始递增。

示例

假设有一个数据表Customer,其中包含一个IDENTITY列CustomerId用作主键:

CREATE TABLE Customer
(
    CustomerId INT IDENTITY(1,1) PRIMARY KEY,
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    EmailAddress VARCHAR(100) NOT NULL
)

现在,需要删除一些记录并重新设置IDENTITY列的初始值以消除缺失的值。执行以下命令:

DELETE FROM Customer WHERE CustomerId IN (4, 7, 8)

DBCC CHECKIDENT ('Customer', RESEED, 7);

这将删除记录4、7和8,并将IDENTITY列的初始值设置为7。接下来,插入新记录时,IDENTITY列将从7开始递增。

结论

重置IDENTITY列的操作比较简单,但是需要谨慎操作。假如新的IDENTITY初始值在表中已经存在,那么插入新记录时可能会引发冲突。因此,应该先检查IDENTITY列的当前最大值,然后选择一个较大的新初始值以避免冲突。