假設我們有下面的數據塊(SQL表):無法插入重複鍵:MySQL來SQL服務器
Col-A Col-B Col-C Col-D
1 1 1 1
1 1 1 2
1 1 1 3
2 2 2 4
2 2 2 5
在MySQL表中被定義爲:
CREATE TABLE `my_table` (
`Col-A` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-B` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-C` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-D` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`Col-A`, `Col-B`, `Col-C`),
KEY `my_index` (`Col-D`) USING BTREE
);
我需要將MySQL數據庫轉換爲SQL Server。這是我最初的嘗試:
CREATE TABLE my_table (
Col-A INT NOT NULL DEFAULT(0),
Col-B INT NOT NULL DEFAULT(0),
Col-C INT NOT NULL DEFAULT(0),
Col-D INT NOT NULL DEFAULT(0),
CONSTRAINT my_pk PRIMARY KEY NONCLUSTERED (Col-A, Col-B, Col-C)
)
CREATE INDEX my_idx ON my_table(Col-D)
當我嘗試導入數據(我用bcp
),出現以下錯誤:
Cannot insert duplicate key ... The duplicate key is (1, 1, 1)
我懷疑這東西是錯誤的my_pk
和my_idx
定義。任何指針或建議?
這條消息對我來說很清楚嗎?您的數據有多個記錄,列A,B和C分別爲1,1,1。這些組合應該是唯一的,以便能夠充當主鍵,但顯然前3個和後2個記錄包含多行,獨特的價值。修復或刪除主鍵約束並創建(集羣或非集羣)索引。爲什麼MySQL首先允許這些數據進入表中(除非主鍵稍後添加,而MySQL沒有檢查已經存在的值)。 (你也可以擴展PK來包含col-D) – RobIII
當然,你的數據組合1,1,1在你的數據中是三次的,所以它不能滿足'PRIMARY KEY'約束。丟棄重複數據或丟棄主鍵。 – Quassnoi
但爲什麼在MySQL中起作用? – Andrej