在SQL中使用IF语句来确定是否发送了电子邮件

时间:2016-08-24 14:44:57

标签: html sql sql-server if-statement stored-procedures

我目前有一个存储过程(Utils.DailySalesTaxDue),它计算字段的总和(SalesTax)。目前,该过程将确定金额,然后执行另一个sproc(Utils.SendEmail)。

有时SalesTax的总和等于0.00美元。在这些情况下,我不希望发送电子邮件。我假设需要一个IF语句。我有一个if语句使用通配符来检查@ReportBody变量中的%$ 0.00%。它有效,但我知道这可能不是最好的方法。这就是我现在所拥有的。

declare @ReportHTML varchar(max), 
            @Recipient varchar(255), 
            @EmailSubject varchar(255), 
            @ReportBody varchar(max)
select 
        @ReportBody = 'Sales Tax Total due is: <b>' + format(isnull(sum(SalesTax),0.00),'C','en-us') + '</b>'
    from 
        Final.FactTransactionDay f
            inner join Final.SaleOutcome so
                on  f.SaleOutcomeKey = so.SaleOutcomekey
    where
        f.StoreID = @StoreID and 
        f.=TransactionDateKey = @TransactionDateKey and
        so.NetCount <> 0

/////Additional Code

--Do not send the email if claim amount is $0.00
    if @ReportBody not like '%$0.00%'
    begin
        --Send email
        exec Utils.SendEmail
                @HTML = @ReportHtml,
                @Recipients = @Recipient,
                @From = 'NoReply@SalesSupport.net',
                @FromName = 'Sales',
                @Subject = @EmailSubject
    end

检查sum(SalesTax)是否不等于$ 0.00更好的方法,如果它不等于然后触发Utils.SendEmail存储过程?

3 个答案:

答案 0 :(得分:3)

聚合查询总是至少返回一行。您的代码可能会使@ReportBody具有NULL值。 。 。 isnull()除外。我会去:

declare @ReportHTML varchar(max), 
        @Recipient varchar(255), 
        @EmailSubject varchar(255), 
        @ReportBody varchar(max),
        @Count int;

select @ReportBody = 'Sales Tax Total due is: <b>' + format(isnull(sum(SalesTax),0.00),'C','en-us') + '</b>',
       @Count = count(*)
from Final.FactTransactionDay f inner join
     Final.SaleOutcome so
     on f.SaleOutcomeKey = so.SaleOutcomekey
where f.StoreID = @StoreID and 
      f.TransactionDateKey = @TransactionDateKey and
      so.NetCount <> 0;

if @count > 0
begin
    . . .
end;

如果您愿意,可以检查sum()而不是count()。我认为如果有任何实际匹配的话你想发送电子邮件。

答案 1 :(得分:1)

怎么样:

DECLARE @ReportHTML varchar(max), 
        @Recipient varchar(255), 
        @EmailSubject varchar(255), 
        @SalesTaxTotal double,
        @ReportBody varchar(max)

SELECT
    @SalesTaxTotal = ISNULL(SUM(SalesTax),0.00),
    @ReportBody = 'Sales Tax Total due is: <b>' + FORMAT(ISNULL(SUM(SalesTax),0.00),'C','en-us') + '</b>'
FROM
    Final.FactTransactionDay f
    INNWE JOIN Final.SaleOutcome so on f.SaleOutcomeKey = so.SaleOutcomekey
WHERE
    f.StoreID = @StoreID
    AND f.TransactionDateKey = @TransactionDateKey
    AND so.NetCount <> 0

--Do not send the email if claim amount is $0.00
IF (@SalesTaxTotal != 0.00)
BEGIN
    --Send email
    EXEC Utils.SendEmail
            @HTML = @ReportHtml,
            @Recipients = @Recipient,
            @From = 'NoReply@SalesSupport.net',
            @FromName = 'Sales',
            @Subject = @EmailSubject
END

答案 2 :(得分:1)

你可以使用

if CHARINDEX('$0.00', @ReportBody ) = 0