Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何创建触发器以检查表是否已更改_Sql_Sql Server 2008 - Fatal编程技术网

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

Sql 如何创建触发器以检查表是否已更改,sql,sql-server-2008,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

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

我创建了一个名为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
我认为我的假设是错误的,但我应该怎么做才能使我的查询正确运行呢
要在历史记录表中插入此值?plz help me and sorry for bad English

触发器可以访问两个逻辑表,这两个逻辑表的结构与我假设的us
项目所定义的表相同

  • 插入,这是要放入表中的新数据
  • 已删除,即表中的旧数据
因此,可以通过以下方式获取旧值:

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

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

它的工作伙伴享受

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;

我编辑了我的问题你能看到它做了什么吗?没用,我终于做到了^_^