SQL触发器-检入其他表,如果存在,则更新,否则插入

时间:2019-06-16 11:55:14

标签: sql sql-server database-trigger

MSSQL

我有两个桌子。 TableA和TableB

TableA

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

TableB

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

在TableA的每个插入中,我要检查TableB中是否存在相同的ID。 如果在TableB中没有ID,则将记录插入到TableB中;如果在TableB中找到ID,则更新TableB中的记录。

如何在TableA上为这些插入内容编写触发器。

1 个答案:

答案 0 :(得分:3)

这种类型的逻辑在SQL Server中有点棘手,因为它将插入作为集合而不是作为单独的行来处理。

因此,您最好使用以下逻辑在所有值上尝试updateinsert

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;