У меня есть оператор слияния, который начинается следующим образом:
MERGE INTO TEMSPASA
USING (SELECT *
FROM OPENQUERY(orad, 'SELECT * FROM CDAS.TDWHCORG')) AS TDWHPASA ON TEMSPASA.pasa_cd = LTRIM(RTRIM(TDWHPASA.corg_id)) AND
TEMSPASA.pasa_active_ind = TDWHPASA.corg_active_ind
WHEN MATCHED THEN
UPDATE
SET
TEMSPASA.pasa_desc = LTRIM(RTRIM(TDWHPASA.corg_nm)),
TEMSPASA.pasa_active_ind = TDWHPASA.corg_active_ind
WHEN NOT MATCHED THEN
INSERT (pasa_cd, pasa_desc, pasa_active_ind)
VALUES (LTRIM(RTRIM(TDWHPASA.corg_id)), TDWHPASA.corg_nm, TDWHPASA.corg_active_ind);
Существуют переменные pasa_cd ('H04', 'H04 *'), где * НЕ является подстановочным знаком.Но я думаю, что оператор on рассматривает его так, как будто это подстановочный знак, потому что, когда я пытаюсь запустить оператор merge, я получаю следующую ошибку:
Оператор MERGE попытался ОБНОВИТЬ или УДАЛИТЬ ту же строкубольше чем единожды.Это происходит, когда целевая строка соответствует более чем одной исходной строке.Оператор MERGE не может ОБНОВИТЬ / УДАЛИТЬ одну и ту же строку целевой таблицы несколько раз.Уточните предложение ON, чтобы убедиться, что целевая строка соответствует не более чем одной исходной строке, или используйте предложение GROUP BY для группировки исходных строк.
Я убедился, что в моей таблице нет дубликатов.Единственное, о чем я могу думать, это то, что я упомянул выше, что часть ON оператора слияния видит, что * как символ подстановки.
Я пробовал искать, видел что-то о escape-символе, но это былов пункте, где.Есть идеи как с этим бороться?