2015-02-11 78 views
0

我在sql server中有一個表有重複的ID,但是我無法刪除那些重複的記錄。現在需要在那個有重複數據的列上創建主鍵。有沒有辦法在不改變數據的情況下創建主鍵。在sql server中創建主鍵

+4

不可以。任何關鍵點(主要或次要)的全部要點是它可以用來*唯一地識別行。因此,您的要求「創建主鍵(*在現有的列*)」和「不更改數據」是相反的。您不能同時滿足 – 2015-02-11 07:01:47

+0

主密鑰見證uniqness,因此您無法在dublicate數據列上創建主密鑰。相反,您需要創建一個具有標識的新列,在此列上您可以創建主鍵。 – Immu 2015-02-11 07:17:04

+0

不,我必須在該列上創建主鍵,以便在驗證主鍵時繞過現有記錄,並在新記錄驗證時記錄錯誤,並在出現重複記錄時提供錯誤。 – 2015-02-11 07:35:36

回答

0

不,沒有辦法將PRIMARY KEY約束添加到已具有重複值的列。

Creating and Modifying PRIMARY KEY Constraints:

當PRIMARY KEY約束添加到現有列或表 列,數據庫引擎檢查現有列 數據和元數據,以確保以下規則主 鍵:

  • 列不允許空值。
  • 不能有重複值

如果PRIMARY KEY約束添加到具有重複值或允許空值,將 數據庫引擎將返回一個錯誤,並且不加約束 列。

如果ID列是漸進的,那麼一個可能的解決方法是增加一個獨特的過濾指數

CREATE UNIQUE INDEX AK_MyUniqueIndex ON dbo.MyTable (ID) 
WHERE ID > ... max value of existing ID here 

這種方式,獨特性將僅適用於新添加的記錄。

+0

同樣的事情,我們可以在oracle中做到這一點,沒有驗證語法和相同我們正在研究SQL Server的一些事情。 – 2015-02-11 07:21:37

+0

@prashant_ora我不認爲這在SQL Server中是可行的。你只能用'CHECK'約束來做到這一點。 – 2015-02-11 07:26:52