为自定义ChangeTable创建数据库触发器

时间:2012-05-31 09:58:45

标签: sql sql-server-2008 triggers

我正在尝试在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知识有限。任何帮助完成代码和纠正错误都将不胜感激。

1 个答案:

答案 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和许多其他网站提供了关于如何处理事情的极好例子。