如何在 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 |
广告