0

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

4

1 回答 1

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 和许多其他网站提供了关于如何做事的优秀示例。

于 2012-05-31T10:07:25.287 回答