2016-08-24 61 views
1

我目前有一個存儲過程(Utils.DailySalesTaxDue),用於計算字段(SalesTax)的總和。目前該過程將確定金額,然後執行另一個存儲過程(Utils.SendEmail)。在SQL中使用IF語句來確定是否發送電子郵件

有時候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 = '[email protected]', 
       @FromName = 'Sales', 
       @Subject = @EmailSubject 
    end 

什麼將檢查總和(銷售稅)是否不等於$ 0.00更好的方法,如果它不等於然後關火Utils.SendEmail存儲過程?

+0

我'總和(銷售稅)'的結果分配給不同的變量,並檢查結果,而不是對電子郵件的整個身體做了'LIKE'。 – Siyual

回答

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

如何:

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 = '[email protected]', 
      @FromName = 'Sales', 
      @Subject = @EmailSubject 
END 
1

可以使用

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

相關問題