触发多行结果集

时间:2015-05-15 01:26:59

标签: sql tsql triggers sql-server-2012

我需要为调查回复中的低结果创建触发通知,并且需要通过电子邮件发送。

完成的调查插入了以下内容:

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的每一行触发。

有没有办法只触发一次,包括通知中的所有结果&lt; 3,无论返回多少行?

1 个答案:

答案 0 :(得分:0)

说到SQL SERVER,每个语句不是按行执行触发器。这意味着,如果你使用:

Insert into tableName (columns...)
values 
(val1, val2),
(val1,val2)

然后只有在语句结束时触发器才会执行一次。我认为这就是你需要的。

还有一件事,你确定这个解决方案是安全的吗? 您假设最大值是当前调查的值。在某些情况下可能并非总是如此。

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)

此致