如何创建触发器以检查表是否已更改

时间:2017-11-23 18:57:32

标签: sql sql-server-2008

我是初学者,我试图创建触发器以检查表是否已更改然后我跟踪已更改并将其插入另一个表

我创建了一个名为history的表,这是我的代码

create table history
(
ProjectNo INT ,
UserName NVARCHAR(50),
ModifiedDate date,
Budget_Old int,
Budget_New int,
)

并创建了此触发器

CREATE TRIGGER t1 on history
on project AFTER UPDATE 
AS BEGIN
   IF UPDATE(Project.Pnumber,Project.Budget)
     INSERT INTO dbo.history (ProjectNo , Username,ModifiedDate,Budget_Old,Budget_New)
          SELECT
             d.ProjectNo, suser_name() ,GETDATE(),d.Budget,i.budget
          FROM 
             Deleted d , inserted i
             where d.projectno = i.projectno
END

我认为我的if语句是错误的,但是我应该怎样做才能让我的查询正常运行 在历史表中插入此值? PLZ帮助我,对不起英语不好意思

2 个答案:

答案 0 :(得分:1)

触发器可以访问两个逻辑表,这些逻辑表的结构与我们假设的Project所定义的表的结构相同。

  • INSERTED,这是进入表格的新数据
  • DELETED,这是表格中的旧数据

所以你可以用这种方式得到旧值:

    CREATE TRIGGER t1
        ON dbo.Project AFTER UPDATE
        AS
            INSERT INTO dbo.history (ProjectNo , Username)
            SELECT d.ProjectNo , d.Username
            FROM DELETED d

如果您需要在表历史记录中只有一个特定项目的记录,那么您将使用基于projectNo的内部联接并相应地更新历史记录表。

答案 1 :(得分:0)

它的作品很享受!!!!!!!!!!!

CREATE TRIGGER tRIGGERNAME1 
 BEFORE UPDATE on history
FOR EACH ROW
BEGIN
 INSERT INTO dbo.history (ProjectNo ,Budget_Old,Budget_New)
VALUES(:OLD.ProjectNo,:OLD.Budget_Old,:NEW.Budget_New);
END;