如何使用更新触发器更新另一个表?
我是新来的触发器,并希望创建一个列的更新触发器和更新另一个表的值。如何使用更新触发器更新另一个表?
我有table1与一年的列,如果应用程序更新那一年列我需要更新与同年的表2。
ALTER TRIGGER [dbo].[trig_UpdateAnnualYear]
ON [dbo].[table1]
AFTER UPDATE
AS
if (UPDATE (intAnnualYear))
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
Update table2 set AnnualYear = intAnnualYear where table2.ID = table1.ID
END
您在触发器内部不参考table1
。使用inserted
伪表来获取“after”值。另外请记住,更新可能会影响多行。
因此,与
UPDATE table2
SET table2.annualyear = inserted.intannualyear
FROM table2
JOIN inserted
ON table2.id = inserted.id
替换当前update
声明你只需要在列intannualyear参与表2更新记录。此外,这是跨越两个表的替代UPDATE语法从什么马丁已经显示出
IF UPDATE(intannualyear)
UPDATE table2
SET annualyear = inserted.intannualyear
FROM inserted
WHERE table2.id = inserted.id
+1这是更好的更新语法。 – 2011-03-10 00:20:34
谢谢你的工作很棒。为了澄清其他人刚开始使用触发器,我找到了一篇很好的文章来解释插入的表格。 http://msdn.microsoft.com/en-us/library/ms191300.aspx – Spafa9 2011-03-10 14:01:32
为了补充以上的答案,如果你要检查多个列,你可以使用一个INNER JOIN的inserted和deleted之间,或几个UPDATE()调用:
IF (UPDATE(Col1) OR UPDATE(Col2)) BEGIN ...
什么是你的问题? – Oded 2011-03-09 22:07:19