#sql-server
#sql-server
Вопрос:
Я хочу выполнить «мягкое удаление». Т. е. вставить новую запись при сопоставлении, а при несоответствии просто вставить запись.
Например:
MERGE TargetTable AS targetT
USING SourceTable AS sourceT ON sourceT.Npi = targetT.Npi
WHEN MATCHED AND IsNull(targetT.SPI, '') <> '' THEN
UPDATE SET targetT.Isdelete = 1 --Update Only One Column
--And also insert a new row
WHEN NOT MATCHED
--Perform insert operation
Комментарии:
1. СОВПАДЕНИЕ означает, что запись уже существует, поэтому вставка на самом деле не имеет смысла. Обновление выполняется…
Ответ №1:
Инструкция слияния не будет работать таким образом. Вам придется делать это по старинке (использование хранимой процедуры будет работать).
Похоже, вы пытаетесь создать архивную запись. Если это верно, я предлагаю вам использовать слияние так, как оно предназначено для использования, и использовать триггер после обновления для выполнения ваших потребностей аудита.