我正在尝试在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 |
------------------------ ------------------------
我该怎么做?
答案 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