SQL Server代理-仅当返回的行大于0时才发送电子邮件

SQL Server代理-仅当返回的行大于0时才发送电子邮件,sql,sql-server,Sql,Sql Server,我想在SQL中配置作业,以便在查询结果符合条件时向我发送电子邮件。 从下面的查询中,我返回了6行: SELECT USERNAME, FORENAME, SURNAME, LOGINCOUNT FROM CS.LOGN.ACCOUNTS where LOGINCOUNT > 900 我已经配置了一个作业来运行上述操作,并通过电子邮件将结果发送给我。我通过以下SQL实现了这一点: EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Alerts',

我想在SQL中配置作业,以便在查询结果符合条件时向我发送电子邮件。 从下面的查询中,我返回了6行:

SELECT USERNAME, FORENAME, SURNAME, LOGINCOUNT
FROM CS.LOGN.ACCOUNTS
where LOGINCOUNT > 900
我已经配置了一个作业来运行上述操作,并通过电子邮件将结果发送给我。我通过以下SQL实现了这一点:

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Alerts',
@recipients = 'abc@abc.com',
@subject = 'CS - Users with more than 900 logons',
@query = N'SELECT USERNAME, FORENAME, SURNAME, LOGINCOUNT FROM CS.LOGN.ACCOUNTS where LOGINCOUNT > 900',
@attach_query_result_as_file=1,
@query_attachment_filename = 'CS - Users with more than 900 logons.csv',
@query_result_no_padding = 1,
@query_result_separator = ','

有什么我可以添加到上面,这样如果没有行返回,它就不用麻烦给我发电子邮件了?目前我遇到的问题是,即使没有返回任何行,我也会收到电子邮件。

我会在作业中创建另一个T-SQL步骤,并使用如下查询:

declare @counter int
with query as (SELECT USERNAME, FORENAME, SURNAME, LOGINCOUNT FROM CS.LOGN.ACCOUNTS where LOGINCOUNT > 900)
select @counter = count(*) from query

IF @counter > 0
BEGIN
SELECT 'Rows exist, proceed to e-mail step'
END
ELSE
BEGIN
    RAISERROR('No rows exist, quit job', 16, 1)
END
在“高级”选项卡中,确保已将其配置为在出现错误时退出作业。如果没有出现错误,请继续执行电子邮件步骤


希望这有帮助:)

如果@counter大于0,您将如何发送查询结果?通过在两个步骤中重新查询或使用暂存表,如果计数器大于0,并且在“高级”选项卡中正确配置了步骤,则作业将进入下一步,这与@Christian在他的问题中解释的一样。如果计数器不大于0,raise error方法将导致步骤失败。要在不进入下一步的情况下退出作业,请将高级选项卡中的“失败时操作”配置为“退出作业报告失败/成功”aghost-谢谢,该查询非常有效!尽管如此,我还是将“关于失败的行动”改为“退出job reporting success”,因为我不希望在LOGN.ACCOUNTS中的*中看到作业历史记录中的错误,其中LOGINCOUNT=<900。理想情况下,LOGINCOUNT永远不应大于900。这有意义吗?是的,克里斯蒂安,有意义。但在这种情况下,如果您在计数器>0的位置引发错误,看起来会更好。您可以根据需要优化解决方案,因此由您决定!谢谢你的回复