У меня есть следующий запрос, где я беру данные из таблиц и использую результат для вставки в таблицу finalTable. finalTable.col1 - это pk. Тем не менее, есть несколько строк в finalTable, которые уже существуют с тем же pk до запуска нижеприведенного запроса. Я хочу изменить его так, чтобы он вставлял (если pk не существует в finalTable) или обновления (если pk уже существует в finalTable).TSQL: INSERT или UPDATE из результата SELECT
INSERT INTO finalTable (col1, col2, col3, col4, col5)
(
SELECT o.id, 14, 0, 1, 4
FROM Table1 c
INNER JOIN Table2 m ON c.ID = m.ID
INNER JOIN Table3 o ON m.ID = o.ID
WHERE c.ID = 40
)
Одно решение, которое я придумал удаляет любые соответствующие строки в finalTable до запуска выше запрос.
Другим решением, которое я придумал, является использование «если существует». Я бы поставил запрос select в оператор if exists, предложение if и предложение else. Мне не нравится это решение, так как я должен поместить выбранный запрос в 3 места, а не только в 1 место.
if exists(...)
begin
... -- update
end
else
begin
... -- insert
end
MERGE работает отлично. Очень полезно. Благодаря! – user2769810