首页 > 解决方案 > 如果在触发器中更新了两列之一,如何插入另一个表?

问题描述

我正在尝试使用 SQL 服务器中的更新后触发器将值插入另一个表。

我有一个表来存储我的员工(employee_id、name、exam_results、exam_date),我需要创建一个触发器,允许我将employee_id、exam_results 和exam_date 插入到名为exams_backlog 的表中,只要在表中更新exam_results 或exam_date雇员。

我不知道我是否能够检查这些字段以进行插入。

这是我到目前为止所拥有的:

CREATE TRIGGER updateExamBacklogTrigger 
   ON  employees
   AFTER  UPDATE
AS 
BEGIN

    *****HERE IS WHERE I NEED TO CHECK IF ONE OF THOSE TWO FIELDS HAS BEEN UPDATED*****

        INSERT INTO exams_backlog SELECT e.employee_id, e.exam_results, e.exam_date FROM employees e

    SET NOCOUNT ON;

END
GO

提前致谢。

标签: sql-servertsqltriggers

解决方案


我找到了我一直在寻找的解决方案:

因为我想检查exam_results 或exam_date 是否已更新,所以我使用了

IF(UPDATE(exam_results) OR UPDATE(exam_date ))

然后为了只为那些已更新的员工插入数据,我使用了

INNER JOIN inserted i ON i.employee_id = e.employee_id

所以完整的触发结果如下:

CREATE TRIGGER updateExamBacklogTrigger 
   ON  employees
   AFTER  UPDATE
AS 
BEGIN

IF(UPDATE(exam_results) OR UPDATE(exam_date ))

    INSERT INTO exams_backlog SELECT e.employee_id, e.exam_results, e.exam_date FROM employees e INNER JOIN inserted i ON i.employee_id = e.employee_id

SET NOCOUNT ON;

END
GO

推荐阅读