Как синхронизировать целевую таблицу с помощью Merge - PullRequest
1 голос
/ 05 октября 2019

Как синхронизировать таблицу с помощью Merge.

У меня есть две таблицы: Source и Target. Я хочу, чтобы таблица Target была синхронизирована с Source после завершения запроса.

Ниже приведены столбцы для обеих таблиц. Я хочу, чтобы все столбцы, кроме Contact_no, были синхронизированы с таблицей Target.

Изначально я скопирую данные из трех столбцов в таблицу Target, где Action = 'I'.

Исходная таблица

Unique_ID   Part_no     Country_Code Contact_no
1           123             IN        12121212
2           456             US        65467987  
3           678             CH        65465465
4           897             EN        56546544  

Целевая таблица

Unique_ID   Part_no     Country_Code    Action
1           123             IN            I
2           456             US            I 
3           678             CH            I
4           897             EN            I

После запуска SQL он обновит, вставит или удалит таблицу Target согласно Source таблице сотносительно флага Action.

Исходная таблица на следующий день изменена

Unique_ID   Part_no     Country_Code Contact_no
1           123             US        12121212  -- Updated Country_Code as "US"
2           456             US        65467987  -- No Change
3           678             CH        56565656  -- Deleted from Source
4           897             EN        56546544  -- No Change
5           114             DL        11111111  -- New Inserted

Целевая таблица

Unique_ID   Part_no     Country_Code    Action
1           123             US            U
2           456             US            I 
3           678             CH            D     -- Deleted from Source
4           897             EN            I
5           114             DL            I     -- Newly Inserted

Я написал ниже оператор Merge, но он не работает должным образом,после начальной вставки с Action флагом «I», когда я выполняю, он обновляет все записи с флагом действия как «U», хотя я обновил только одну запись в таблице Source.

MERGE INTO Target d2
USING (SELECT Unique_id, Part_no, Country_code 
       FROM Source
       UNION ALL
       SELECT a.Unique_id, a.Part_no, a.Country_code
       FROM Target a LEFT JOIN Source b ON a.Unique_id=b.Unique_id
       WHERE b.Unique_id IS NULL 
       ) d
ON (d2.Unique_id=d.Unique_id)
WHEN NOT MATCHED THEN
   INSERT(Unique_id, Part_no, Country_code, Action)
   VALUES(d.Unique_id, d.Part_no, d.Country_code, 'I')
WHEN MATCHED THEN
   UPDATE SET d2.Action = 'U', d2.Country_code = d.Country_code;
-- DELETE WHERE d2.loc='DELETE ME';

Пожалуйста, помогите мне с этим.

...