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上为这些插入内容编写触发器。
答案 0 :(得分:3)
这种类型的逻辑在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;