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

时间:2015-12-07 15:21:21

标签: 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',
@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 = ','

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

1 个答案:

答案 0 :(得分:1)

我会在作业中创建另一个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

在高级选项卡中,确保将其配置为在引发错误时退出作业。如果没有出现错误,请继续执行电子邮件步骤

希望这有用:)