0

我有以下预定的工作-

Execute as login = 'sa'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL Mail Profile',
@recipients = 'Tania.Mofflin@fuelfix.com.au',
@subject = 'Wennsoft Service Management - Unposted Costs',
@body = 'Unposted Costs from Closed POs:
        ',
@execute_query_database = 'FPLL',
@query = 'Select A.Service_Call_ID as "Service Call", A.Reference_TRX_Number as "Reference Number", A.WS_Committed_Cost as "Committed Cost"
            from SV000810 A LEFT JOIN POP10110 B on A.Reference_TRX_Number = B.PONUMBER and A.SEQNUMBR = B.ORD
            where A.WS_Committed_Cost <> 0 and B.QTYUNCMTBASE = 0'

哪个工作正常,但我想包含一个 IF 语句,它只在没有结果的情况下执行。

谢谢

4

1 回答 1

0

这是一个老问题,但是......由于您正在使用的工作步骤只是 T-SQL,您可以执行以下操作:

IF exists(Select *
        from SV000810 A LEFT JOIN POP10110 B on A.Reference_TRX_Number = B.PONUMBER and 
        A.SEQNUMBR = B.ORD where A.WS_Committed_Cost <> 0 and B.QTYUNCMTBASE = 0)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL Mail Profile',
@recipients = 'Tania.Mofflin@fuelfix.com.au',
@subject = 'Wennsoft Service Management - Unposted Costs',
@body = 'Unposted Costs from Closed POs:
        ',
@execute_query_database = 'FPLL',
@query = 'Select A.Service_Call_ID as "Service Call", A.Reference_TRX_Number as 
    "Reference Number", A.WS_Committed_Cost as "Committed Cost"
        from SV000810 A LEFT JOIN POP10110 B on A.Reference_TRX_Number = B.PONUMBER and 
        A.SEQNUMBR = B.ORD
        where A.WS_Committed_Cost <> 0 and B.QTYUNCMTBASE = 0'
END

请注意查询是如何在此处运行两次的,因此它的性能不是最好的。您可以将查询结果转储到临时表中,然后使用临时表执行 EXISTS() 和电子邮件,或者如果您愿意,也可以使用表变量。以上只是您尝试的最快途径。

于 2014-12-31T16:35:22.077 回答