當資料表達到百萬筆以上,使用游標逐行檢查刪除重複記錄不僅效能極差,更是開發人員的噩夢。本文介紹一種無需游標、僅需四步驟的高效解法,利用唯一索引特性快速去重。
假設有一產品資訊表 Products,結構如下:
CREATE TABLE Products (
ProductID int,
ProductName nvarchar(40),
Unit char(2),
UnitPrice money
)
表中 Chang 與 Tofu 兩筆產品存在重複記錄,需刪除重複、保留單筆。
CREATE TABLE Products_temp (
ProductID int,
ProductName nvarchar(40),
Unit char(2),
UnitPrice money
)
在企業管理器中對 Products_temp 右鍵 → 所有工作 → 管理索引 → 新增,勾選「忽略重複值」與「唯一」選項,或以 T-SQL 建立:
CREATE UNIQUE INDEX IX_Products_temp_Unique
ON Products_temp (ProductName, Unit, UnitPrice)
WITH IGNORE_DUP_KEY
INSERT INTO Products_temp SELECT * FROM Products
執行後會提示「已忽略重複的鍵」,暫存表即無重複列。
DELETE FROM Products
INSERT INTO Products SELECT * FROM Products_temp
DROP TABLE Products_temp
小提醒: 唯一索引的欄位選擇決定何為「重複」,操作前務必確認索引欄位正確,避免誤刪有效資料。