SQL Server 代理作业步骤 - 如果存在不评估

Posted

技术标签:

【中文标题】SQL Server 代理作业步骤 - 如果存在不评估【英文标题】:SQL Server agent job step - if exists not evaluating 【发布时间】:2020-01-31 03:40:46 【问题描述】:

我在 SQL Server 2016 中设置了一个作业来监控一个表,如果存在某些数据,我会通过电子邮件通知。

IF EXISTS (SELECT 1 FROM NPS_Logging.dbo.accounting_data WHERE "NP_Policy_Name" LIKE '***%' AND "timestamp" > DATEADD(day,-1,CURRENT_TIMESTAMP))
BEGIN
 send email (won't bother showing full commands as they work as mentioned below)
END

当我测试工作时,我没有收到电子邮件。

我认为if exists 没有评估(我知道现在应该评估)所以我手动运行SELECT 1... 查询并返回 1。

然后我认为发送电子邮件已损坏,因此我将其放在开始/结束之外并进行了测试。

if exists (SELECT 1 ...
BEGIN
END
send email

它成功了,我收到了一封电子邮件。

谁能看出我哪里出错了?

【问题讨论】:

显然IF 条件返回FALSE。检查exists 查询 我在if exists 语句中手动运行了选择查询,它为找到的每条记录返回一个1(目前有六个这样的记录)。 您是否在与SQL Server Agent 相同的安全上下文中运行它? 我已将作业的所有者设置为与相关数据库的所有者相同,这是我用来手动运行存在查询的帐户。如果它无法读取表格,我不会出错吗? 【参考方案1】:

去掉引号:

如果存在(从 NPS_Logging.dbo.accounting_data 中选择 1,其中 NP_Policy_Name LIKE '***%' AND timestamp > DATEADD(day,-1,CURRENT_TIMESTAMP)) 开始 发送电子邮件(不会费心显示完整的命令,因为它们的工作原理如下所述) 结束

就个人而言,当我做这种事情时,我喜欢检索记录数而不是使用 IF EXISTS...我经常在电子邮件的正文或主题中使用记录。

【讨论】:

以上是关于SQL Server 代理作业步骤 - 如果存在不评估的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server代理作业

翻译:通往SQL Server代理的阶梯-二级:作业步骤和子系统

SQL Server代理(11/12):维护计划作业

通往SQL Server代理的阶梯-二级:作业步骤和子系统

修改维护计划时,SQL Server 代理新添加的作业步骤被删除

翻译— 通往SQL Server代理的阶梯-二级:作业步骤和子系统