У меня есть исходная таблица, называемая payroll в промежуточной базе данных. Я использую оператор Merge, который вставляет данные сотрудников из базы Staging to Expense. После того, как сотрудники женятся и их фамилия меняется, я получаю эту ошибку:Заявление о слиянии с сообщением об ошибке после изменения фамилии в таблице источников
The MERGE statement attempted to UPDATE or DELETE the same row more than once. This happens when a target row matches more than one source row. A MERGE statement cannot UPDATE/DELETE the same row of the target table multiple times. Refine the ON clause to ensure a target row matches at most one source row, or use the GROUP BY clause to group the source rows.
У меня есть уникальный индекс EmployeeID
Employee
в таблице. Например, один месяц я получаю файл с уникальным идентификатором имени 10072 имени Эбби и фамилией кузнец, когда Эбби выходит замуж за изменения ее фамилии в Маршалл, но с тем же именем и идентификатором сотрудника. Что мне делать?
Вот мое заявление о слиянии.
MERGE INTO Dimension.Employee AS T
USING
(
SELECT DISTINCT
LTRIM(RTRIM(EmplID)) AS EmployeeID
,LTRIM(RTRIM(FirstName)) AS FirstName
,LTRIM(RTRIM(LastName)) AS LastName
FROM Staging.PayRoll
) AS S
ON T.EmployeeID = S.EmployeeID
WHEN NOT MATCHED THEN
INSERT (EmployeeID, FirstName, LastName)
VALUES (S.EmployeeID, S.FirstName, S.LastName)
WHEN MATCHED THEN UPDATE SET
T.FirstName = S.FirstName
, T.LastName = S.LastName
;
все ли какие-либо противопоказания на столе? – GurV
Не используйте MERGE для этого; используйте отдельные инструкции INSERT и UPDATE ... вы слишком усложняете ситуацию! – gvee