我目前有一个存储过程(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存储过程?
答案 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