Триггер SQL - проверка в другой таблице, если существует, то обновить еще вставить - PullRequest
1 голос
/ 16 июня 2019

MSSQL

У меня есть две таблицы.TableA и TableB

TableA

+----+----+-----+
| ID |Name|Marks|
+----+----+-----+
| 1  |ABC |50   |
+----+----+-----+
| 2  |BCD |80   |
+----+----+-----+

TableB

+----+----+-----+
| ID |Name|Marks|
+----+----+-----+
| 1  |ABC |50   |
+----+----+-----+
| 4  |PQR |10   |
+----+----+-----+

При каждой вставке в TableA я хочу проверитьесли такой же идентификатор есть в таблице B или нет.Если ID отсутствует в TableB, вставьте запись в TableB, если ID найден в TableB, обновите запись в TableB.

Как мне записать триггер в TableA для этих вставок.

1 Ответ

3 голосов
/ 16 июня 2019

Этот тип логики немного сложен в SQL Server, потому что он обрабатывает вставки как устанавливает , а не как отдельные строки.

Таким образом, вы также можете попробовать update иinsert для всех значений, используя следующую логику:

create trigger on tablea after insert
begin
    -- update everything that matches
    update b
        set marks = a.marks
        from tableb b join
             inserted a
             on b.id = a.id;

    -- insert what doesn't match
    insert into tableb
        select a.id, a.name, a.marks
        from inserted a
        where not exists (select 1 from tableb b where b.id = a.id);
end;
...