2013-04-25 102 views
0

我知道這聽起來很瘋狂(如果我設計數據庫我會做不同),但我實際上想強制插入一個重複鍵。我正在處理一個數據庫,該數據庫被設計爲將列設置爲'not null'pk,它們對於每一行都具有相同的值。我正在使用的記錄保存軟件以某種方式可以將dups插入到每個記錄的這些列中。我需要將數據從另一個表中的列複製到這一列中的一列中。通常我只會嘗試插入到那個列中,但是pk被設置爲'not null',所以我必須在其中放入一些東西,並且表的設置方式是每個記錄必須有相同的東西。這應該是不可能的,但是製作記錄保存軟件的公司使它工作了一些。我想知道如果有人知道如何做到這一點?如何強制重複鍵插入mssql

P.S.我知道這通常不是一個好主意。所以請僅僅包括如何做到這一點的建議,無論它是多麼瘋狂。謝謝。

+4

取下PK /唯一約束。 – 2013-04-25 17:35:34

+3

請發佈該表的創建腳本以及所謂的重複數據的子集。 – Quassnoi 2013-04-25 17:37:41

+1

是否有可能主鍵實際上是該列和另一列的組合? – urlreader 2013-04-25 18:27:28

回答

0

一個SQL Server主鍵必須是獨特NOT NULL。因此,您看到重複數據的列不能成爲自己的主鍵。正如urlreader所建議的,它必須是包含一個或多個其他列的複合主鍵的一部分。

如何確定組成表的主鍵:在企業管理器中,展開表,然後展開「列」。主鍵列旁邊會有一個「關鍵」符號。您還會看到「PK」之列描述後,像這樣:

MyFirstIDColumn (PK, int, not null) 
MySecondIDColumn (PK, int, not null) 

一旦你知道哪些列構成主鍵,只需確保您插入唯一的數據組合成列。所以,對於我上面的示例表,這將是:

INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --SUCCEED 
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,2) --SUCCEED 
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --FAIL because of duplicate (1,1) 
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,3) --SUCCEED 

更多關於主鍵:

http://msdn.microsoft.com/en-us/library/ms191236%28v=sql.105%29.aspx