【发布时间】:2017-06-13 13:40:34
【问题描述】:
我正在创建两个触发器。一种用于捕获 Rewards 表的插入值,另一种用于捕获 Rewards 表的已删除值。触发器的主要功能是记录对审计表所做的更改类型。
奖励表: enter image description here
审核表: enter image description here
audit_insert_trigger 的 SQL 是:
CREATE TRIGGER tr_rewards_insert
ON Rewards AFTER INSERT, UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(6)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM inserted)
IF EXISTS (SELECT * FROM inserted)
BEGIN
SELECT @type_change = 'Inserted'
END
INSERT INTO audit_rewards
VALUES (
@category, USER_NAME(), GETDATE(), @type_change)
END
CREATE TRIGGER tr_rewards_delete
ON Rewards AFTER UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(6)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM deleted)
IF EXISTS (SELECT * FROM deleted)
BEGIN
SELECT @type_change = 'Deleted'
END
INSERT INTO audit_rewards
VALUES (
@category, USER_NAME(), GETDATE(), @type_change)
END
我的想法是替换“插入”的位置并放置“删除”。我不是很明白 1. 为什么这不起作用的逻辑和 2. 如何将删除的值放入审计表并记录它是一个删除。
无法一次性完成。必须是两个独立的触发器。
【问题讨论】:
标签: sql sql-server tsql triggers