sql-server - 如果在触发器中更新了两列之一,如何插入另一个表?
问题描述
我正在尝试使用 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
提前致谢。
解决方案
我找到了我一直在寻找的解决方案:
因为我想检查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
推荐阅读
- android - addListenerForSingleValueEvent 在 onKeyEnteredMethod 中使用自定义回调:仍然没有得到我想要的值
- android - 有没有办法只显示特定路线的交通信息?
- bixby - 开始 bixby 应用的开始话语
- class - F# 成员一个内部函数,仅在第一次调用时评估
- jaxb - 通过 Gradle 插件进行 JAXB 继承
- typescript - 在 TypeScript 中推断构造函数类型
- delphi - 如何从 Windows 的多行编辑控件中查询原始行?
- python - 表在 django 中不存在
- sql - 如何在 SQL Server 中显示日期名称?
- javascript - 自动重命名文件夹 alfresco