2

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

当合并语句执行时,它会抛出以下错误:

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
4

1 回答 1

2

通常,当您的源中有重复的行,或者您正在更新主键时,就会发生这种情况。

这就是为什么我很少使用MERGE. 相反,我使用单独的UPDATEandINSERT语句,它允许您将问题隔离到插入或更新步骤。

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

于 2018-09-07T01:42:19.463 回答