删除Microsoft SQL的触发器
我正在创建两个触发器。一个用于捕获奖励表的插入值,另一个用于捕获奖励表的删除值。触发器的主要功能是将所做的更改类型记录到审计表中 奖励表: 审计表: audit_insert_触发器的SQL为:删除Microsoft SQL的触发器,sql,sql-server,tsql,triggers,Sql,Sql Server,Tsql,Triggers,我正在创建两个触发器。一个用于捕获奖励表的插入值,另一个用于捕获奖励表的删除值。触发器的主要功能是将所做的更改类型记录到审计表中 奖励表: 审计表: audit_insert_触发器的SQL为: CREATE TRIGGER tr_rewards_insert ON Rewards AFTER INSERT, UPDATE AS IF UPDATE(category) BEGIN DECLARE @category char(6) DECLARE @type_
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
我的想法是只替换“插入”的位置,然后将“删除”。我真的不明白。关于为什么这样做行不通的逻辑以及2。如何将删除的值放入审核表并记录为删除
不能在一个触发器中触发。必须是两个独立的触发器 您的
insert
触发器不正确。我认为应该是:
CREATE TRIGGER tr_rewards_insert
ON Rewards AFTER INSERT, UPDATE
AS IF UPDATE(category)
BEGIN
INSERT INTO audit_rewards
SELECT 'INSERTED, USER_NAME(), GETDATE(), category
FROM inserted;
END;
DELETED
触发器基本相同。切勿假定插入的和删除的只有一行。您的插入的触发器不正确。我认为应该是:
CREATE TRIGGER tr_rewards_insert
ON Rewards AFTER INSERT, UPDATE
AS IF UPDATE(category)
BEGIN
INSERT INTO audit_rewards
SELECT 'INSERTED, USER_NAME(), GETDATE(), category
FROM inserted;
END;
DELETED
触发器基本相同。永远不要假设插入的和删除的只有一行。找到了答案:
CREATE TRIGGER tr_rewards_insert
ON Rewards AFTER INSERT, UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(2)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM inserted)
SELECT @type_change = 'Inserted'
INSERT INTO audit_rewards
VALUES (@category, USER_NAME(), GETDATE(), @type_change)
END
CREATE TRIGGER tr_rewards_delete
ON Rewards AFTER DELETE, UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(2)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM deleted)
SELECT @type_change =
INSERT INTO audit_rewards
VALUES (@category, USER_NAME(), GETDATE(), @type_change)
END
找到了答案:
CREATE TRIGGER tr_rewards_insert
ON Rewards AFTER INSERT, UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(2)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM inserted)
SELECT @type_change = 'Inserted'
INSERT INTO audit_rewards
VALUES (@category, USER_NAME(), GETDATE(), @type_change)
END
CREATE TRIGGER tr_rewards_delete
ON Rewards AFTER DELETE, UPDATE
AS IF UPDATE(category)
BEGIN
DECLARE @category char(2)
DECLARE @type_change char(20)
SELECT @category = (SELECT category FROM deleted)
SELECT @type_change =
INSERT INTO audit_rewards
VALUES (@category, USER_NAME(), GETDATE(), @type_change)
END
insert工作正常,并记录在审核表中。delete是不会记录到表中的触发器。对于影响多行的语句,两个触发器都将失败。“永远不要假设插入和删除的只有一行。”不要介意我的评论。我明白你现在在说什么了。它不会同时记录多个条目。还是SQL的新手!!insert工作正常,并记录在审核表中。delete是不会记录到表中的触发器。对于影响多行的语句,两个触发器都将失败。“永远不要假设插入和删除的只有一行。”不要介意我的评论。我明白你现在在说什么了。它不会同时记录多个条目。还是SQL的新手!!