2013-04-22 148 views
0

这里是我的表:SQL Server触发器在更新或插入

报告表:

ReportID Status 
1   'out' 
2   null 

日志表

LogID  Status  ReportID 
1   'out'  1 

当我插入新记录到日志表我想触发更新相应的状态字段。示例:插入到日志(LogID = 2,Status ='out',ReportID = 2)我想要更新ReportID(2)fild的状态报告表以便它们匹配。

输出会像这样结束; 报告表:

ReportID Status 
1   'out' 
2   'out'  //changed from null to out by the Log trigger 

日志表

LogID  Status  ReportID 
1   'out'  1 
2   'out'  2 

这里的问题是如何创建一个触发器来更新第二个表时,第一个要么有一个新的插入或更新的现有记录?

+0

为什么你不只是使用视图? – 2013-04-22 01:32:56

+0

@lc。 - 这里的观点对OP来说会做什么?我真的好奇,没有做出聪明的评论:) – Tim 2013-04-22 01:46:16

+0

@Tim我正在读一些问题,猜测OP希望报表按照日志表中的行显示最新状态。因此,我在质疑是否需要在两个不同的地方去规范化和存储相同的数据。 – 2013-04-22 01:49:27

回答

3

我想你可能会寻找这样的事情:

create trigger updatereport on log 
after insert, update 
as 
update r 
set status = i.status 
from report r 
    inner join inserted i on r.reportid = i.reportid; 

SQL Fiddle Demo

+0

在MS SQL Server Mgmt Studio中,触发器应显示在Programmability> Database Triggers ...下,如果没有显示,但运行代码时没有收到错误 – Kairan 2013-04-22 02:19:16

+0

@Kairan - 没有它在我前面。我很确定它出现在表格下方 - 展开表格,您应该看到的其中一个文件夹是触发器。这里是我刚刚查找的一篇文章:http://stackoverflow.com/questions/12346914/how-to-find-all-trigger-associated-with-a-table-with-sql-server – sgeddes 2013-04-22 02:22:13

+0

谢谢你,这是它的地方找到。 – Kairan 2013-04-22 02:25:10