当一封电子邮件SPROC调用现有的SPROC时,dbo.sp_send_dbmail和HTML

时间:2012-08-23 16:53:06

标签: tsql sql-server-2008-r2 sp-send-dbmail

我想构建HTML并使用sp_send_dbmail发送它。 此页面上的选项C说明了如何执行此操作。 http://msdn.microsoft.com/en-us/library/ms190307.aspx

但这是我的捕获。我创建了一个名为AbcStats的存储过程。很多时候,我会去SSMS,只是在没有电子邮件的情况下执行“exec ABCStats”,只想在屏幕上看到数据网格中的结果集。我已经设置了一些我自己的标准,将结果评为“好”或“坏”,并且存储过程在任何事情为坏时返回1,在全部为好时返回0。

然后我创建了一个运行Sproc JobAbcAlert的SQL代理作业,如下所示:

ALTER Procedure 
[dbo].[JobAbcAlert] 
(
   @SendEmailOnlyOnError bit = 1 
   )
as
begin


DECLARE @Status int 
DECLARE @BoolSendEmail bit = 0 
DECLARE @emailSubject varchar(100) = 'BizTalk Feed Status - Good' 

-- Call Stored Proc first time to find out if status is "GOOD" or "BAD"
-- which is used to determine if email is sent, and what is subject of email 

EXEC @status = AbcStats @report='short'  -- faster to run with "short" report option 

if @status = 1  -- (0=all good, 1=at least one "BAD" encountered)  
   Begin
      print 'BAD status, setting email subject' 
      SET @emailSubject = 'QT PRODUCTION ISSUE: BizTalk Feed Status - CRITICAL - contact BizTalk team ' 
   End 

if @status = 1 or @SendEmailOnlyOnError = 0  
   Begin
      SET @BoolSendEmail = 1 
   End 

if @BoolSendEmail = 1 
   Begin
        print 'sending email' 
        EXEC msdb.dbo.sp_send_dbmail 
            @profile_name = 'DoNotReply@SomeCompany.com',     
            @recipients = 'MyPeeps@SomeCompany.com',     
            @subject = @emailSubject,
            @query = 'exec abcStats @report=''full'';',
            @append_query_error = 1,
            @query_result_separator = ' ' 

        /* SMS not yet working */ 
        /*
       TODO Send a short text email that can be forwarded to SMS        
        */ 
    End 


end     

我正在尝试不重写代码。 abcStats是300行代码,可能会增长到包含其他有用的警报。

如果我在abcStats中创建HTML,那么运行它将不会有用。 我可以获取结果集并将其包装在jobAbcStats中的HTML中吗? 如果我将abcStats重写为表函数,那么我可以将HTML放在jobAbcStats中怎么办?只需要为电子邮件完成HTML格式化。

我以前的帖子有点相关: Alternative and Best ways to format SQL query for phone alert messages

1 个答案:

答案 0 :(得分:1)

您可以在abcStats sproc中创建一个@RenderFormat参数。然后你可以返工(也许不必重写)abcStats来调整基于传入@RenderFormat的结果。

这样,当您从SSMS调用它时,abcStats可以吐出简单的SQL结果,当您将结果作为sp_send_dbmail的一部分使用时,它可以将结果包装成HTML。