如何在 SQL 中重置标识列的值


什么是标识列?

表的标识列是一个其值依次递增的列。这可以用来创建唯一的标识符,例如主键。

语法

以下是创建标识列的语法。标识的初始设置表示为 IDENTITY (1,1)。

IDENTITY [ ( seed , increment ) ]

其中 -

  • 种子:种子确定 ID 的初始值,默认设置为 1。
  • 增量:这表示 ID 增量的步长值,也默认为 1。

示例

首先,让我们创建一个名为“Customer”的表,如下所示。在本例中,表的 Customer_ID 列从 1 开始,因为默认种子值为 1,并且每一行依次递增 1。

CREATE TABLE Customer (
   Customer_ID INT IDENTITY,
   Customer_Name VARCHAR(200),
   Salary INT
);

现在,让我们向上述表中插入一些值 -

INSERT INTO Customer (Customer_Name, Salary) VALUES ('Aisha', 50000);
INSERT INTO Customer (Customer_Name, Salary) VALUES ('Kabir', 45000);
INSERT INTO Customer (Customer_Name, Salary) VALUES ('Ananya', 52000);
INSERT INTO Customer (Customer_Name, Salary) VALUES ('Rohan', 48000);
INSERT INTO Customer (Customer_Name, Salary) VALUES ('Meera', 48000);

该表将创建如下所示 -

Customer_ID Customer_Name Gender
1 Aisha 50000
2 Kabir 45000
3 Ananya 52000
4 Rohan 48000
5 Meera 48000

让我们从上面创建的表中删除一条记录 -

DELETE FROM Customer WHERE Customer_ID = 4;

如果您在删除后检索表的內容,您可以观察到 Customer_ID 列不再按顺序排列,因此您需要重置标识列。

Customer_ID Customer_Name Salary
1 Aisha 50000
2 Kabir 45000
3 Ananya 52000
5 Meera

48000

重置标识列

您可以使用 DBCC CHECKIDENT 方法重置标识值。以下是执行此操作的语法 -

DBCC CHECKIDENT ('table_name', RESEED, new_value);

注意:如果我们重置表中的现有记录并插入新的记录,则会出现错误。

  • 创建一个新表作为主表(即 Customer)的备份。
  • 删除主表中的所有数据。
  • 重置标识列。
  • 将备份表中的所有数据重新插入主表。

示例

首先,让我们创建一个名为 new_Customer 的备份表,如下所示 -

CREATE TABLE new_Customer 
AS 
SELECT Customer_ID, Customer_Name, Salary FROM Customer;

现在,清除 Customer 表中的所有数据,并重置标识列。

DELETE FROM Customer;
DBCC CHECKIDENT ('Customer', RESEED, 0);

最后,将所有数据从备份插入回主表。

INSERT INTO Customer (Customer_Name, Salary) 
SELECT Customer_Name, Salary 
FROM new_Customer 
ORDER BY Customer_ID ASC;

生成的表如下所示 -

Customer_ID Customer_Name Gender
1 Aisha 50000
2 Kabir 45000
3 Ananya 52000
4 Meera 48000

更新于: 2024-10-11

15 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告