如何在TRIGGER中处理UPDATE

时间:2019-06-21 12:27:25

标签: sql-server stored-procedures database-trigger

当我从User中删除,编辑或添加元素时,我需要创建一个触发器来更新组的总计

create table Group(Grp varchar(3) primary key, Name varchar(20), total int);
create table User(Num varchar(3) primary key, Name varchar(30), Sex char(1), Grp varchar(3) references group);

例如:

Table group
+-----+----------+-------+
| Grp | name     | total |
+-----+----------+-------+
| a   | admin    | 2     |
+-----+----------+-------+
| b   | customer | 0     |
+-----+----------+-------+

和表用户

+-----+-------+-----+-----+
| num | name  | sex | Grp |
+-----+-------+-----+-----+
| 1   | kevin | m   | a   |
+-----+-------+-----+-----+
| 2   | kim   | f   | a   |
+-----+-------+-----+-----+

因此,如果我添加一个新用户,则组的总值必须增加;
如果我将其删除,则减小;但是
如果我更改用户组,则如何使用触发器{{1 }}他的to decrease
的总数和old group他的新组的总数

我尝试了什么:

increase

1 个答案:

答案 0 :(得分:0)

我将按照您的要求回答您的具体问题,因为这似乎是您的一项学术练习。

  

如果更改用户组,如何使用触发器来减少   他的旧组的总数并增加新组的总数

更改用户组时,您正在对表进行UPDATE。触发器中的单行UPDATE在inserted表和deleted表中都导致一行。

因此,通过检查“如果不存在”,可以防止如果还有INSERT,则不计算DELETES,反之亦然。

如果您摆脱了IF NOT EXISTS检查,而对每个插入简单地递增,对每个删除简单地递减,那么您将以所需的方式处理UPDATES。