我会尽力解释我想做的事情(为简单起见,我只包括两个我正在使用的专栏):
`
select d.DeviceDN, s.TonerLowB, s.TonerLowY
from dbo.Device d,
dbo.DeviceStatus s
where
d.DeviceDN = s.DeviceDN
and s.TonerLowB + s.TonerLowY > 0 ;
`
然后我用sp_send_dbmail修改,看看我是否可以通过邮件发送结果,我确实设法在定义配置文件并创建自己的测试邮件服务器后执行此操作。我使用了以下命令:
`
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MyMailProfile',
@recipients = 'alex@testing.ro',
@query = 'select d.DeviceDN, s.TonerLowB, s.TonerLowY
from dbo.Device d,
dbo.DeviceStatus s
where
d.DeviceDN = s.DeviceDN
and s.TonerLowB + s.TonerLowY > 0 ;' ,
@subject = 'Your Query Results',
@attach_query_result_as_file = 1 ,
@query_result_separator = '|' ;
`
问题是,这会向我发送值大于1的所有行,并且我不知道如何为每个更新发送,而只是为更新的行而不是此“批量”方法。
我正在考虑向数据库db.devicestatus,TonerLowB_LastUpdate和TonerLowY_LastUpdate添加两个新列,两者都设置为“datetime”。 然后我想创建两个触发器,当TonerLowB或TonerLowY更新它的值时,将使用“set gettime()”更新TonerLowB_LastUpdate或TonerLowY_LastUpdate,并发送一封电子邮件,其中包含更改其值的行(使用我上面提到的邮件程序) ,如果该日期超过3天。 不幸的是我不知道如何声明这个触发器,这就是我想要寻求帮助的地方。
这是可能的,如果是的话,它会是一个好的(可靠的)机制吗?
答案 0 :(得分:0)
一种明智的方法是使用'触发器'在这种情况下。
看一下这篇文章就可以开始了 Using Triggers to do actions after specific values are updated 总而言之,在字段上定义更新触发器:
CREATE TRIGGER TonerValueChanged
ON DeviceStatus
AFTER UPDATE
AS
BEGIN
// here you need to check for the condition if the value is updated to 1 and send the mail
END
现在,根据您的条件更新每个值,将触发邮件 每行更新。
希望这有帮助。