【问题标题】:SQL Server Trigger On Update or InsertSQL Server 在更新或插入时触发
【发布时间】:2013-04-22 01:27:40
【问题描述】:

这是我的桌子:

报告表:

ReportID    Status
1           'out'
2           null

日志表

LogID       Status      ReportID
1           'out'       1

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

输出最终会是这样; 报告表:

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

日志表

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

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

【问题讨论】:

  • 为什么不直接使用视图?
  • @lc。 - 这里的视图对 OP 有什么作用?我真的很好奇,没有做出聪明的评论:)
  • @Tim 我正在阅读这个问题,并猜测 OP 希望报告表根据日志表中的行显示最新状态。因此,我质疑是否需要非规范化并将相同的数据存储在两个不同的地方。
  • @lc。 - 喔好吧。我知道你要去哪里。感谢您的回答-我在那里挠头。您应该将其发布为解决 OP 问题的替代方法,因为未来其他人可能更喜欢它而不是触发器,具体取决于要求。

标签: sql sql-server-2008 triggers


【解决方案1】:

我想你可能正在寻找这样的东西:

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

【讨论】:

  • @Kairan -- 不要在我面前。我很确定它会显示在表格下方——展开表格,您应该看到的文件夹之一是触发器。这是我刚刚查到的帖子:stackoverflow.com/questions/12346914/…
  • 谢谢,这是找到它的地方。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
相关资源
最近更新 更多