【问题标题】:SQL Server - notify 30,15, 7 days from timeSQL Server - 通知 30,15, 7 天后
【发布时间】:2018-05-21 16:15:20
【问题描述】:

我正在尝试纠正将执行以下任务的 SQL 查询:

例子:

ExpirationDate =  '2018-04-30 00:00:00.000'

当属性设置为在 30 天... 1 个月前到期时,我希望 SQL Server 向我发送电子邮件,通知我该项目即将到期(到期日期)

有人可以给我一些关于我下一步要去哪里的建议吗……这是我到目前为止所尝试的…… 下面的查询将找到该项目,但是我现在希望 SQL Server 代理为返回的每一行向我发送一封电子邮件,而不是在没有返回任何内容时

选择 * FROM [dbo].[属性] WHERE expirationdate

【问题讨论】:

  • 先想一想。你想让经纪人每天都在行动吗?包括节假日和周末?或者只是“工作日”。让我们假设每一天。因此,您需要找到到期日期(注意 - 日期,而不是日期时间 - 这很重要)为(即等于)今天 + 30 天的行。正确的?现在使用一些代码并使用一些在该特定日期及其前后具有到期日期的示例数据。一旦你得到正确的查询,你就可以考虑电子邮件。
  • 这是正确的 SELECT * FROM [dbo].[Property] WHERE pexpirationdate

标签: sql-server


【解决方案1】:

这是一个关于如何从 sql server 工作代理通过电子邮件发送结果的绝佳链接:

https://www.brentozar.com/archive/2014/10/send-query-results-sql-server-agent-job/

至于您的查询:我不会选择 *。明确选择您希望在电子邮件回复中返回的列。

接下来我将定义一个变量来保存您的截止值,这将阻止您对查询中的每一行进行计算。示例:

DECLARE @day30UpperBound DATETIME = DATEADD(Day, 31, cast(getdate() as date));
DECLARE @day30LowerBound DATETIME = DATEADD(Day, 30, cast(getdate() as date));

然后您可以使用以下方式查询结果:

SELECT explicitColumnList FROM [dbo].[Property] 
WHERE expirationdate BETWEEN @day30LowerBound AND @day30UpperBound

此特定示例应为您提供那些到期日期在从当前午夜 30 天到当前午夜 31 天的窗口内的属性 - 因此从当天 30 天开始的完整 24 小时窗口。

您可以轻松地为您的 15 天和 7 天报告重现这一点。您可以将所有 3 份报告放入一个工作代理中。或者你可以为这 3 个中的每一个做不同的工作。

如果你想要的话,你必须研究一下如何只做工作日。

【讨论】:

  • 感谢您的帮助。我将所有结果保存在 csv 文件中,并通过发送邮件任务发送电子邮件,并安排 sql 代理作业每天运行。
猜你喜欢
  • 2019-07-11
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多