sql sever 中2. 分别使用after触发器实现以下功能:修改emp表的sal列值时,如果修改前后的差距大于1000,则在emp_sal_audit中加入修改操作的相关信息.。一个update操作可能修改多行,符合以上要求的,对其执行审计,不符合以上要求的,执行审计操作。不管差距是否大于1000,修改操作都允许执行。
时间: 2024-03-12 17:44:54 浏览: 85
sqlsever中触发器的查询和修改
可以使用如下的 SQL Server 语句创建一个名为 `trg_emp_sal_audit` 的 `AFTER UPDATE` 触发器实现该功能:
```
CREATE TRIGGER trg_emp_sal_audit
ON emp
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF @@ROWCOUNT = 0 -- 没有更新操作
RETURN;
-- 插入符合条件的操作到 emp_sal_audit 表中
INSERT INTO emp_sal_audit (emp_id, old_sal, new_sal, audit_date)
SELECT d.emp_id, d.old_sal, d.new_sal, GETDATE()
FROM (
SELECT i.emp_id, d.sal AS old_sal, i.sal AS new_sal
FROM inserted i
JOIN deleted d ON i.emp_id = d.emp_id
WHERE ABS(i.sal - d.sal) > 1000
) d;
-- 插入所有更新操作到 emp_sal_audit 表中
INSERT INTO emp_sal_audit (emp_id, old_sal, new_sal, audit_date)
SELECT d.emp_id, d.sal AS old_sal, i.sal AS new_sal, GETDATE()
FROM inserted i
JOIN deleted d ON i.emp_id = d.emp_id;
END;
```
其中,`inserted` 表代表更新后的表,`deleted` 表代表更新前的表。触发器首先检查是否有更新操作,如果没有则直接返回,否则将符合条件的操作插入到 `emp_sal_audit` 表中,然后将所有更新操作都插入到 `emp_sal_audit` 表中。这样可以确保无论差距是否大于1000,所有的更新操作都会被记录到审计表中。
阅读全文