Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在满足日期条件后从SQL Server发送邮件_Sql_Sql Server_Triggers - Fatal编程技术网

如何在满足日期条件后从SQL Server发送邮件

如何在满足日期条件后从SQL Server发送邮件,sql,sql-server,triggers,Sql,Sql Server,Triggers,我需要在满足日期条件时从SQL Server发送电子邮件,即在日期的一小时后发送邮件 下表如下: SELECT [ID_EVENTO] ,[FIRST NAME] ,[OBJECTIVE] ,[START DATE] ,[END DATE] ,[ID_LUGAR] FROM [Events]. [Dbo]. [TBL_EVENTO] 首先,我想用扳机来做这个,但它已经变得越来越复杂了 你有什么建议吗?为什么不安排一个DB作业,比如说,每分钟运行一次,或者以你认为更适合你的要求的频率运行一次。此

我需要在满足日期条件时从SQL Server发送电子邮件,即在日期的一小时后发送邮件

下表如下:

SELECT [ID_EVENTO]
,[FIRST NAME]
,[OBJECTIVE]
,[START DATE]
,[END DATE]
,[ID_LUGAR]
FROM [Events]. [Dbo]. [TBL_EVENTO]
首先,我想用扳机来做这个,但它已经变得越来越复杂了


你有什么建议吗?

为什么不安排一个DB作业,比如说,每分钟运行一次,或者以你认为更适合你的要求的频率运行一次。此作业将检查结束日期值是否已过一小时,并将触发电子邮件


创建触发器,但我需要在结束日期增加1的同时发送邮件

ALTER TRIGGER [dbo].[enviarCorreo]
    ON [dbo].[TBL_EVENTO]
    AFTER INSERT
AS

EXEC msdb.dbo.sp_send_dbmail
   @profile_name = 'Pruebas',
   @recipients = 'pruebacorreo@correo.com',
   @body = 'Prueba mail',
   @subject = 'Prueba correo' ;

您是否想过使用SQL作业来检查您的日期/时间,并让它按计划完成您需要的任务?或者这更像是一种即时类型的事情,比如插入之后?在插入之后,在事件表中保存记录时,邮件在结束日期后一小时发送从触发器发送电子邮件通常是个坏主意。我同意代理工作听起来是个不错的主意。此外,触发器发生在事件上,如DML或DDL语句。触发器不会触发,因为表中的值与当前日期和时间的值相同;这似乎是您所追求的行为。因此,这与插入无关,它与结束日期和当前系统时间有关。触发器在这里是100%错误的工具。您应该查看sql作业并安排它。我还建议你阅读和阅读。在你的案例@SebastianSalazar中,我会使用一个作业,每5、10、15分钟运行一次,无论你需要什么,检查一个小时的窗口,然后发送电子邮件。你也可以看看ServiceBroker,但是,这比你在这里需要的要复杂得多。这比三条几乎相同的评论更能说明问题吗?问题中有足够的细节,您可以实际演示查询。那么这将成为一个可行的答案。我看不出你在检查什么样的持续时间,塞巴斯蒂安。您是否在其他地方检查过期的小时数,然后更新表中的记录以触发此触发器?