Действие типа ‘INSERT’ не разрешено в предложении ‘ПРИ СОПОСТАВЛЕНИИ’ инструкции СЛИЯНИЯ

#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:

Инструкция слияния не будет работать таким образом. Вам придется делать это по старинке (использование хранимой процедуры будет работать).

Похоже, вы пытаетесь создать архивную запись. Если это верно, я предлагаю вам использовать слияние так, как оно предназначено для использования, и использовать триггер после обновления для выполнения ваших потребностей аудита.