如何在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告