【发布时间】:2015-07-26 19:44:32
【问题描述】:
我需要为调查回复中的低结果创建触发通知,并且需要通过电子邮件发送。
已完成的调查插入以下内容:
Results_RecID Question Points
1800 Rate our service 2
1800 Recommend us? 3
1800 Additional comments? 0
1800 <potential question 4>
1800 <potential question 5>
1800 <potential question 6>
问题的数量可能因调查的设置方式而异。
检索最新的结果集:
SELECT srd.points
FROM dbo.SV_ResultsDtl srd
WHERE (srd.SV_ResultsHdr_RecID IN (SELECT MAX(srd.SV_ResultsHdr_RecID FROM SV_ResultsDtl srd))
AND (srd.points < 3)
触发器将为低于 3 的每一行触发。
有没有办法让它只触发一次,在通知中包含所有结果
【问题讨论】:
-
触发器本质上是在插入、更新或删除数据时调用的存储过程。您似乎没有进行这些操作。因此,我不明白你的问题。
-
提交调查时插入数据。这是发生这种情况的触发器。所以很明显,我刚刚列出了用于检索将在触发器中使用的最新结果的查询。
-
每个适用的语句都会触发一次触发器。如果
INSERT语句添加了42 行,那么INSERT触发器将触发一次,并且inserted表中将提供42 行新行。 (查看this MSDN 页面。)您可以处理所有受影响的行并生成摘要操作,例如在排队的电子邮件消息表中插入一行。 -
我不建议从触发器发送电子邮件。可能出错的两件事: 1. 触发器中的错误逻辑意味着一百万封电子邮件被尽职尽责地发送; 2. 未能发送电子邮件可能会导致触发器失败,然后更新失败。一些更好的方法是: 1. 使用触发器插入队列,该队列随后由发送电子邮件的对象执行; 2. 运行搜索未处理的调查记录的频繁工作(即每 5 分钟一次)。这两种方法都将电子邮件与应用程序本身分开
标签: sql tsql triggers sql-server-2012