【问题标题】:How send mail from SQL Server after fulfilling a date condition满足日期条件后如何从 SQL Server 发送邮件
【发布时间】:2019-06-04 18:18:41
【问题描述】:

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

表格如下:

SELECT [ID_EVENTO]
,[FIRST NAME]
,[OBJECTIVE]
,[START DATE]
,[END DATE]
,[ID_LUGAR]
FROM [Events]. [Dbo]. [TBL_EVENTO]

首先我想用触发器来做这件事,但它变得越来越复杂......

你有什么建议?

【问题讨论】:

  • 您是否考虑过使用 SQL 作业来检查您的日期/时间并让它按计划完成您需要的工作?或者这更像是在立即类型的事情上,比如在 INSERT 之后?
  • 在INSERT之后,将记录保存到Events表时,邮件是在END_DATE后一小时发送的
  • 从触发器发送电子邮件通常是个坏主意。我同意代理工作在这里听起来是正确的想法。 此外,触发器会发生在 DML 或 DDL 语句等事件上。触发器不会触发,因为表中的“值”与当前日期和时间的值相同;这似乎是您所追求的行为。
  • 所以这与插入无关,它与END_DATE和当前系统时间有关。触发器在这里是 100% 错误的工具。您应该查看一个 sql 作业并安排它。我还建议您阅读thisthis
  • 在你的情况下@SebastianSalazar,我会使用每 5、10、15 分钟运行一次的作业——无论你需要什么——检查那个一小时的窗口,然后发送电子邮件。您也可以查看 SERVICE BROKER,但是,这比您需要的更多。

标签: sql sql-server triggers


【解决方案1】:

您为什么不安排一个数据库作业,例如,每分钟或您认为更适合您要求的任何频率运行一次。此作业将检查是否从 END_DATE 值过去一小时,并将触发电子邮件。

HTH!

【讨论】:

  • 这比三个几乎相同的 cmets 更像一个答案吗?问题中有足够的细节,您可以实际演示查询。那么这将成为一个可行的答案。
【解决方案2】:

创建触发器,但我需要 end_date 增加 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' ;

【讨论】:

  • 塞巴斯蒂安,我看不出你在哪里检查任何类型的持续时间。您是否在其他地方检查过期时间,然后更新表中的记录以触发此触发器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多