创建一个触发器,在更新行时将旧值插入到其他表中

时间:2015-03-10 06:34:30

标签: sql sql-server triggers

我正在尝试在SQL Server数据库上实现触发器,只要在table2中更新行,就会在table1中插入新行。我想在更新之前获取行数据(table1)。

例如,我有以下行:

 table1:                          table2:
 ________________________         ________________________
 |  id       |    name  |         |  id    |     name    |
 ________________________         ________________________
 |   1       |    John  |         
 ------------------------         

目前我正在使用以下触发器 -

CREATE TRIGGER triggername
ON table1
FOR UPDATE
AS
Begin
  INSERT INTO table2(name) 
     SELECT i.name 
     FROM Inserted i
End

此触发器正在执行以下操作 -

 table1:                          table2:
 ________________________         ________________________
 |  id       |    name  |         |  id    |     name    |
 ________________________         ________________________
 |   1       |    Alex  |         |   1    |      Alex   |
 ------------------------         ------------------------

但我想在表2中'约翰'。例如,table1和table2现在应该如下 -

 table1:                          table2:
 ________________________         ________________________
 |  id       |    name  |         |  id    |     name    |
 ________________________         ________________________
 |   1       |    Alex  |         |   1    |      John   |
 ------------------------         ------------------------

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您需要在触发器中使用Deleted伪表,其中包含值(在UPDATE之前):

CREATE TRIGGER triggername
ON table1
FOR UPDATE
AS
Begin
  INSERT INTO table2(name) 
     SELECT d.name 
     FROM Deleted d
End

Inserted伪表包含值 - 在UPDATE之后。

答案 1 :(得分:1)

这只会返回新值:

INSERT INTO table2(name) 
SELECT i.name 
FROM Inserted i

然而,这将返回更新前的值

INSERT INTO table2(name) 
select d.name
from inserted i
  join deleted d
    on (i.id = d.id)

答案 2 :(得分:1)

使用以下内容 -

 Begin
   INSERT INTO table2(name) 
   SELECT d.name 
   FROM Deleted d
 End