首页 > 解决方案 > SQL 只有在表不为空时才执行过程?

问题描述

我有一个 SQL 查询,它告诉我我们打开的所有订单以及我们应该何时发货。我想创建一个例行的电子邮件群发,提醒人们今天需要发货的所有订单。

这是我的代码

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'AMT',
    @recipients = 'test@test.com',
    @body = 'results -- some body goes here',
    @subject = 'Sensible subject goes here ',
    @query = 'SELECT Order, ShipByDate, HoursLeft FROM OrdersTable WHERE HoursLeft < 24'

此代码有效。唯一的问题是,当没有少于 24 小时的订单或结果为空时,它会发送一封具有相同主题和正文的空表电子邮件。

我想在 EXEC 行之前有一个 if 语句,用于检查 OrdersTable 在 24 小时或更短的条件下是否为空。这可能吗?我知道 exec 你使用 IF 而不是 CASE 但我不确定如何检查表是否为空。

标签: sqlsql-serveremail

解决方案


声明不IF符合您的要求吗?

IF (EXISTS (SELECT 1 FROM OrdersTable WHERE HoursLeft < 24))
BEGIN
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AMT',
        @recipients = 'test@test.com',
        @body = 'results -- some body goes here',
        @subject = 'Sensible subject goes here ',
        @query = 'SELECT Order, ShipByDate, HoursLeft FROM OrdersTable WHERE HoursLeft < 24';
END;

推荐阅读