Использование слияния в SQL Server для обновления третьей таблицы - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть две таблицы A и B. Таблица A является источником, а B является целью. Исходя из некоторых условий, я буду либо обновлять существующие строки (только выборочные столбцы) в B из A, либо вставлять как новую строку в B из A. A и B имеют одинаковые столбцы. Это я могу сделать с помощью MERGE.

Теперь, если строка в таблице B обновлена, мне нужно обновить некоторые записи в 3-ей таблице C. Возможно ли это сделать в следующем операторе,

MERGE B
USING A
ON A.somecolumn = B.somecolumn

WHEN MATCHED THEN

UPDATE 
SET
B.somecolumn1 = A.somecolumn1,
B.somecolumn2 = A.somecolumn2

WHEN NOT MATCHED BY TARGET THEN
INSERT INTO B
somecolumn1, 
somecolumn2, 
somecolumn3,
somecolumn4 

VALUES
(
A.somecolumn1, 
A.somecolumn2, 
A.somecolumn3,
A.somecolumn4 
);

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Вам необходимо временное хранилище вывода из оператора слияния и оператора обновления, использующего переменную временная таблица / таблица.

3 голосов
/ 01 декабря 2011

В этой статье от Microsoft показан пример использования OUTPUT $action... в конце вашего запроса для заполнения временной таблицы.Это тот подход, который вам придется использовать.

Моя предыдущая идея о возможности использования оператора MERGE в качестве подзапроса для UPDATE в третьей таблице не работает.Я мог бы обновить свой ответ, чтобы использовать временную таблицу / переменную, но ответ (и пример) из @ Микаэль Эрикссон уже предоставил вам чистое решение, и мое просто подражало бы этому, когда я закончил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...