Почему оператор MERGE выбрасывает ошибку ограничения уникального ключа - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь выполнить оператор слияния между двумя таблицами, таблицей 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

1 Ответ

0 голосов
/ 07 сентября 2018

Обычно это происходит, когда в вашем источнике есть повторяющиеся строки, или если вы обновляете первичный ключ.

Вот почему я редко использую MERGE.Вместо этого я использую отдельные операторы UPDATE и INSERT, которые позволяют изолировать проблему на этапе вставки или обновления.

ON T.Name LIKE S.Name вряд ли будет правильным.Пожалуйста, попробуйте ON T.Name = S.Name вместо

...