我希望更新触发器指定特定字段。如果该字段值被更改,我想插入另一个表中,选择所有更新行的值,即使它只是一个字段。
示例
id--------value1--------value2
1-----------abc ----------efg
如果value1更新为hij,我想选择id(1),value1(hij)和value2(efg)并插入另一个表。
我无法执行inserted.Id或inserted.value2,因为两个字段都没有更新。
注意:请注意只更新1个字段,其他字段值前后相同,在我的问题中我刚刚使用了一个示例,但在现实生活中会插入一条记录,我希望插入相同的值到不同的表上。但是在插入时,记录将不会被批准,直到稍后批准的字段值被更改时,我预计会将其他字段中的值带到不同的表格。
答案 0 :(得分:1)
在UPDATE
触发器中,您可以访问包含旧值(Deleted
之前)的Inserted
和UPDATE
伪表以及之后的新值UPDATE
。
所以你应该写下这样的东西:
CREATE TRIGGER trg_Updated
ON dbo.YourTableName
FOR UPDATE
AS
INSERT INTO dbo.ThisOtherTableOfYours(Id, Value1, Value2)
SELECT
i.Id, i.Value1, i.Value2
FROM
Inserted i
INNER JOIN
Deleted d ON i.Id = d.Id
WHERE
i.Value1 <> d.Value1
SELECT
基本上将两个伪表与旧值和新值连接起来,并选择那些在Value1
列中有差异的行。
从这些列中,更新后的新值将插入到另一个表中。 Inserted
表格确实包含来自您表格的所有列(及其新值) - 不仅仅是那些已经实际更新的列 - 全部!< / p>
答案 1 :(得分:0)
您应该使用简单的触发器:
create or replace trigger NAME on TABLENAME after update as
if :new.value1 = 'hij'{
insert into OTHERTABLE (id, value1, value2) values (:old.id, :old.value1, :old.value2);
}