我有兩個公司在同一軟件上運行的兩個數據庫,因此DB結構是相同的。LEFT OUTER JOIN導致違反唯一鍵約束
的Windows Server 2003,MS SQL Sever的2005
我試圖項目列表和相關表格從SOURCE複製到目的地。
總共有11個表格,我使用腳本的相同格式來完成11個工作。其中三個失敗。
下面的例子是三個中的一個:
--dbo.ITEM_MEASURE 5
SET IDENTITY_INSERT DESTINATION.dbo.ITEM_MEASURE ON
INSERT DESTINATION.dbo.ITEM_MEASURE(
ITEM_MEASURE_ID, MEAS_TYPE, ITEMNO, MEAS_CODE, SELLPRIC, MARKUP, S_PERC_DOC,
MIN_AMOUNT, COSTPERSP, COST, COST_LOW, COST_HIGH, WEIGHT_MEAS, WEIGHT,
SIZE_MEAS, LENGTH, BREADTH, HEIGHT, VOLUME_MEAS, VOLUME, LAST_COST)
SELECT s.ITEM_MEASURE_ID, s.MEAS_TYPE, s.ITEMNO, s.MEAS_CODE, s.SELLPRIC,
s.MARKUP, s.S_PERC_DOC, s.MIN_AMOUNT, s.COSTPERSP, '0', '0', '0' ,
s.WEIGHT_MEAS, s.WEIGHT, s.SIZE_MEAS, s.LENGTH, s.BREADTH, s.HEIGHT,
s.VOLUME_MEAS, s.VOLUME, '0'
FROM SOURCE.dbo.ITEM_MEASURE s
LEFT OUTER JOIN DESTINATION.dbo.ITEM_MEASURE d
ON (d.ITEM_MEASURE_ID = s.ITEM_MEASURE_ID)
WHERE d.ITEM_MEASURE_ID IS NULL
SET IDENTITY_INSERT DESTINATION.dbo.ITEM_MEASURE OFF
/* ERROR
Msg 2627, Level 14, State 1, Line 73
Violation of UNIQUE KEY constraint 'IN_ITEM_MEASURE_UQ_ITEM_TYPE_MEAS'. Cannot insert duplicate key in object 'dbo.ITEM_MEASURE'.
The statement has been terminated.
*/
表PK是ITEM_MEASURE_ID,有在任一源或目的地無重複分別與我的理解它的「WHERE d.ITEM_MEASURE_ID IS NULL」語句阻止它試圖將數據複製到已存在的DESTINATION中。
爲什麼我會收到此錯誤?
更新 - 不能發表圖片,但這裏是一個看的約束和索引:
https://photos-6.dropbox.com/t/1/AAD2EzrJTZFy_BMqcL5i2dWmZn1bAp5C7Y6LAHwJZ1btYQ/12/1501690/png/1024x768/3/1415138400/0/2/constraint.png/vvHTaOuDXOO72MN7IYeDnbLzAjQ65deom5zF9GV3jgw
更新 - 在IN_ITEM_MEASURE_UQ_ITEM_TYPE_MEASURE屬性:https://photos-3.dropbox.com/t/1/AAC8eurM2o8SfHfvLNOsvwt8h_2P_qGpvRBmhovIp3cJzg/12/1501690/png/1024x768/3/1415142000/0/2/properties.PNG/Lf4Q_hE1QTsHgEI1BAxR9WoyL2R71MPFxDZJ5R9kXN0
UNIQUE KEY約束'IN_ITEM_MEASURE_UQ_ITEM_TYPE_MEAS'的定義是什麼? – DeanOC 2014-11-04 19:51:35
請回答@ DeanOC的問題,因爲最可能的問題是除了主鍵以外還有另一個唯一的密鑰 – Lamak 2014-11-04 20:01:39
我很抱歉地報告,我不明白問題或者如何回答。我認爲SQL是綠色的,這是我第一次理解這些東西。 – todbanner 2014-11-04 20:10:17