SQLserver创建触发器当往教职工工资项目表中插入记录或删除记录时,自动修改该职工的应发工资数和实发工资数
时间: 2024-03-06 18:49:09 浏览: 83
在 SQL Server 中,可以使用以下语法创建触发器来实现当往教职工工资项目表中插入或删除记录时,自动修改该职工的应发工资数和实发工资数:
```
CREATE TRIGGER update_salary
ON salary_project
AFTER INSERT, DELETE
AS
BEGIN
IF EXISTS (SELECT * FROM inserted)
UPDATE salary SET
should_salary = should_salary + (SELECT SUM(project_salary) FROM inserted WHERE inserted.staff_id = salary.staff_id),
actual_salary = actual_salary + (SELECT SUM(project_salary) FROM inserted WHERE inserted.staff_id = salary.staff_id)
WHERE salary.staff_id IN (SELECT staff_id FROM inserted);
ELSE IF EXISTS (SELECT * FROM deleted)
UPDATE salary SET
should_salary = should_salary - (SELECT SUM(project_salary) FROM deleted WHERE deleted.staff_id = salary.staff_id),
actual_salary = actual_salary - (SELECT SUM(project_salary) FROM deleted WHERE deleted.staff_id = salary.staff_id)
WHERE salary.staff_id IN (SELECT staff_id FROM deleted);
END;
```
上述触发器的作用是在向 salary_project 表中插入或删除记录后,根据插入或删除的数据更新 salary 表中对应职工的应发工资数和实发工资数。
需要注意的是,由于触发器可以同时响应多行数据的插入或删除,因此在更新语句中需要使用子查询来计算该职工所有工资项目的总和,并使用 WHERE 子句来限定更新的职工。同时,由于触发器同时响应插入和删除事件,因此需要使用 IF EXISTS 子句来判断触发器事件的类型。
阅读全文