为什么MERGE语句抛出唯一的键约束错误

时间:2018-09-07 00:03:40

标签: sql-server tsql merge-statement

我正在尝试在两个表(表A和表B)之间运行merge语句。该语句应该更新记录,如果指定字段(名称)上存在匹配项,而插入记录则不存在匹配项。

执行merge语句时,将引发以下错误:

Violation of UNIQUE KEY constraint 'AK_UniqueName'. Cannot insert duplicate key in object 'dbo.Table B'. The duplicate key value is (A. Adams).

合并语句,表A,表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

表A

**Name**   **Lname**
A. Adams   Adams
B. Adams   Adams

表B

**Name**   **Lname**
A. Adams   Adams
C. Adams   Adams

所需结果(合并后的表B-带有新一行)

**Name**   **Lname**
A. Adams   Adams
B. Adams   Adams
C. Adams   Adams

1 个答案:

答案 0 :(得分:1)

通常,这在源中有重复的行或正在更新主键时发生。

这就是为什么我很少使用MERGE的原因。取而代之的是,我使用单独的UPDATEINSERT语句,使您可以将问题隔离到插入或更新步骤。

ON T.Name LIKE S.Name不太可能是正确的。请改为尝试ON T.Name = S.Name