Существует таблица, в которой необходимо исправить значения в нескольких столбцах. Затем идет таблица, содержащая все значения, которые необходимо исправить.
Есть ли простой способ использовать CROSS APPLY в инструкции MERGE?
С моими текущими знаниями мне нужно будет запустить следующий код для столбца1, столбца2 и так далее.
MERGE INTO target_table AS t
USING source_table AS s
ON t.key_column = s.key_column
AND 'column_1' = s.correction_column
WHEN MATCHED THEN
UPDATE SET t.column_1 = s.correction_value;
РЕДАКТИРОВАТЬ: Это игрушечные примеры цели, источника и ожидаемого результата.
Цель:
## | uid | col_1 | col_2 | col_3 | col_4 | col_5
----------------------------------------------------
## 1 | 1 | a | a | a | a | a
## 2 | 2 | a | a | a | a | a
## 3 | 3 | a | a | a | a | a
## 4 | 4 | a | a | a | a | a
## 5 | 5 | a | a | a | a | a
## 6 | 6 | a | a | a | a | a
Источник:
## | uid | col | value
----------------------------
## 1 | 1 | col_1 | B
## 2 | 1 | col_2 | C
## 3 | 4 | col_3 | D
## 4 | 4 | col_4 | E
## 5 | 5 | col_3 | F
Ожидаемый результат:
## | uid | col_1 | col_2 | col_3 | col_4 | col_5
----------------------------------------------------
## 1 | 1 | B | C | a | a | a
## 2 | 2 | a | a | a | a | a
## 3 | 3 | a | a | a | a | a
## 4 | 4 | a | a | D | E | a
## 5 | 5 | a | a | F | a | a
## 6 | 6 | a | a | a | a | a
CROSS APPLY
? Что вы тожеCROSS APPLY
делаете, функцию табличного значения? Помогите нам помочь вам. Демонстрационные данные и ожидаемые результаты также помогут в этом. - person Larnu   schedule 21.08.2020MERGE
моя целевая таблица указывается просто как таблица, а моя исходная таблица обычно представляет собой запрос. Если это сложный запрос (или вам нужно отфильтровать секционированные/оконные поля), вы можете использоватьCTE
перед операторомMERGE
. - person JoeFletch   schedule 21.08.2020