我試圖在SQL Server 2008中的一個數據庫表上添加一個新的唯一索引。這是一個現有表和我希望唯一索引已經有一些重複的列值。已有數據庫表中的唯一索引
我可以爲該列設置唯一索引嗎?如果是這樣,怎麼樣?
我試圖在SQL Server 2008中的一個數據庫表上添加一個新的唯一索引。這是一個現有表和我希望唯一索引已經有一些重複的列值。已有數據庫表中的唯一索引
我可以爲該列設置唯一索引嗎?如果是這樣,怎麼樣?
如果列已經有重複的值,那麼我會建議你創建一個獨特的複合鍵代替。
例如 因此,要處理這個問題與此表的設計,你需要在表上創建客戶ID唯一約束/產品ID列:
創建CustomerProducts唯一索引cust_products_unique(客戶ID,產品ID)
因此,在本質上字段的組合確保索引是唯一的。
問候
如果表中已經有重複值,則不能使用UNIQUE索引設置此列,除非您刪除包含該列重複值的記錄。這轉到UNIQUE的定義。
沒有顧名思義,唯一的索引說,關鍵必須是唯一的。所以,你不能
首先,你是要去需要刪除您列重複的值,然後就可以在其上創建唯一索引。所以我們假設你的表有2列,id
和column1
。要刪除重複值,您需要選擇一個,它可以是隨機的或有一定的順序。因此,這將是這樣的:
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Id) Corr
FROM YourTable
)
DELETE FROM CTE
WHERE Corr > 1
CREATE UNIQUE INDEX I_Unique ON YourTable(Column1)
可能不會在SQL Server 2008是真實的,但是你可以使用Management Studio這樣做在以後的版本,如2014年