为什么 MERGE 语句抛出唯一键约束错误
Why is the MERGE statement throwing a unique key constraint error
我正在尝试 运行 两个表 Table A 和 Table B 之间的合并语句。该语句应该更新记录是指定的存在匹配项字段(名称)和要插入的记录不存在匹配项。
执行合并语句时会抛出以下错误:
Violation of UNIQUE KEY constraint 'AK_UniqueName'. Cannot insert duplicate key in object 'dbo.Table B'. The duplicate key value is (A. Adams).
合并语句,Table A,Table B 和期望的结果如下:
合并语句
BEGIN
MERGE dbo.TableB AS T
USING dbo.TableA AS S
ON T.Name LIKE S.Name
WHEN MATCHED THEN
UPDATE SET T.Lname = IsNULL(S.Lname,T.Lname),
WHEN NOT MATCHED THEN
INSERT (Name, Lname);
END
Table一个
**Name** **Lname**
A. Adams Adams
B. Adams Adams
Table B
**Name** **Lname**
A. Adams Adams
C. Adams Adams
期望的结果(Table 合并后的 B - 有一个新行)
**Name** **Lname**
A. Adams Adams
B. Adams Adams
C. Adams Adams
通常,当您的源中有重复的行,或者您正在更新主键时,就会发生这种情况。
这就是我很少使用MERGE
的原因。相反,我使用单独的 UPDATE
和 INSERT
语句,这允许您将问题隔离到插入或更新步骤。
ON T.Name LIKE S.Name
不太可能是正确的。请尝试 ON T.Name = S.Name
而不是
我正在尝试 运行 两个表 Table A 和 Table B 之间的合并语句。该语句应该更新记录是指定的存在匹配项字段(名称)和要插入的记录不存在匹配项。
执行合并语句时会抛出以下错误:
Violation of UNIQUE KEY constraint 'AK_UniqueName'. Cannot insert duplicate key in object 'dbo.Table B'. The duplicate key value is (A. Adams).
合并语句,Table A,Table B 和期望的结果如下:
合并语句
BEGIN
MERGE dbo.TableB AS T
USING dbo.TableA AS S
ON T.Name LIKE S.Name
WHEN MATCHED THEN
UPDATE SET T.Lname = IsNULL(S.Lname,T.Lname),
WHEN NOT MATCHED THEN
INSERT (Name, Lname);
END
Table一个
**Name** **Lname**
A. Adams Adams
B. Adams Adams
Table B
**Name** **Lname**
A. Adams Adams
C. Adams Adams
期望的结果(Table 合并后的 B - 有一个新行)
**Name** **Lname**
A. Adams Adams
B. Adams Adams
C. Adams Adams
通常,当您的源中有重复的行,或者您正在更新主键时,就会发生这种情况。
这就是我很少使用MERGE
的原因。相反,我使用单独的 UPDATE
和 INSERT
语句,这允许您将问题隔离到插入或更新步骤。
ON T.Name LIKE S.Name
不太可能是正确的。请尝试 ON T.Name = S.Name
而不是