【发布时间】:2014-11-04 19:39:35
【问题描述】:
我有两个公司的两个数据库在同一个软件上运行,因此数据库结构是相同的。
Windows Server 2003、MS SQL Sever 2005。
我正在尝试将项目列表和相关表格从 SOURCE 复制到 DESTINATION。
总共有 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,分别在 SOURCE 或 DESTINATION 中没有重复项,据我了解,“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 的问题,因为最可能的问题是除了主键之外还有另一个唯一键
-
很抱歉报告,我不明白这个问题,也不知道如何回答。我对 SQL 很熟悉,这是我第一次尝试理解这些东西。
-
根据 dbo.ITEM_MEASURE 的设计,唯一显示的关键是 PK
-
@todbanner 但是错误信息清楚地写着:
UNIQUE KEY constraint 'IN_ITEM_MEASURE_UQ_ITEM_TYPE_MEAS'。因此,转到表的索引,看看那里是否有唯一索引。或约束
标签: sql sql-server outer-join unique-key surrogate-key