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