字段满足特定条件时发送电子邮件警报

时间:2018-12-13 14:33:13

标签: sql-server-2012 ssms

使用SQL Server Management Studio 2012

我希望每当表中的某个字段大于零时就向我发送一封电子邮件。这不是经常发生的事情,但是我希望在发生时得到提醒。

我只想通过电子邮件发送新的插入内容,而不是以前的任何内容。在下面的示例中,以第3列为关注字段,Harry是最新的插入内容,第3列大于零。这是我希望收到警报的时间,因为您也可以看到Jack的值也大于零,但请假设这是一个较旧的条目,所以我不希望它出现在电子邮件中。

Name     Department      Column3   Column4   Column5
Harry    HR                 2         ABC      DEF
James    Sport              0         ABC      DEF
Jack     Finance            1         ABC      DEF         

SQL中的电子邮件功能相对较新,但了解以下基本知识

use Database
go


begin
Execute msdb.dbo.sp_send_dbmail



 @recipients = 'emailaddress',
 @query = 'select Name, department, Column3 from    mytable

 where Column3 > 0 '



End

2 个答案:

答案 0 :(得分:1)

可以使用触发器来检查INSERTED表中的值,并在该值超过指定数量时执行sp_send_dbmail。下面是一个示例触发器。如果尚未使用sp_send_dbmail,则需要正确配置数据库邮件。可以在here中找到有关数据库邮件和进行此设置的更多详细信息。游标用于为添加/更新的每个新行发送电子邮件。由于您只想从新行或更新行中获取数据,因此可以从INSERTED表而不是查询中获取数据,然后将其用于构建@body的{​​{1}}参数。  请注意,sp_send_dbmail用于保护null,就像使用CONCAT运算符将多个字符串一起添加并且其中一个为null一样,整个串联的字符串也将为null。但是,如果使用+,则仍将保留非null字符串。表变量用于最初从CONCAT表中获取值,该值随后将被馈送到游标中。 INSERTED表将从INSERTEDINSERT操作中捕获值。从您的问题来看,似乎您仍然想将新值添加到表中,因此使用了UPDATE触发器。

AFTER

答案 1 :(得分:0)

我正在寻找使用VBA而不是SQL的类似答案。这可能是一个很好的解决方案,但是仍然需要了解条件位。

Trigger email alert on excel based on date review

您会考虑切换到VBA吗?