我正在尝试在SQL Server 2008中为tblCustomer
表创建数据库触发器。每次在tblChanges
表中进行插入,更新或删除时,我都需要在tblCustomer
表中添加新行。
具体来说,我需要它来插入已更改的CustomerId (PK)
,发生更改的dateTime
以及更改类型(插入,更新,删除)。
到目前为止,我已经掌握了这些内容,但无法弄清楚其余部分:
CREATE TRIGGER change_trigger
AFTER INSERT OR UPDATE OR DELETE
ON tblCustomer
DECLARE log_action varchar(30)
BEGIN
IF INSERTING THEN
log_action := 'I';
ELSEIF UPDATING THEN
log_action := 'U';
ELSEIF DELETEING THEN
log_action := 'D';
ELSE
DBMS_OUTPUT.PUT_LINE('undefined');
END IF;
INSERT INTO tblChanges(ChanedPK, ChangedTime, ChangedType)
VALUES ...
我不确定上面的SQL是否正确,因为我还没有尝试过运行它,而且我的SQL知识有限。任何帮助完成代码和纠正错误都将不胜感激。
答案 0 :(得分:0)
尝试以下几点:
CREATE TRIGGER change_trigger AFTER INSERT, UPDATE, DELETE
ON tblCustomer
AS
BEGIN
DECLARE log_action varchar(30)
IF EXISTS (SELECT * FROM INSERTED) AND NOT EXISTS(SELECT * FROM DELETED)
SET log_action = 'INSERT'
IF EXISTS NOT (SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED)
SET log_action = 'DELETE'
IF EXISTS (SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED)
SET log_action = 'UPDATE'
-- Your other code goes here
END
也许你应该首先在SQL Server中读取非T-SQL和DML触发器。 MSDN和许多其他网站提供了关于如何处理事情的极好例子。