2011-11-16 33 views
-1

我有一个存储过程,它循环访问一个记录集并将文件附加到一封电子邮件中,然后发送给用户。T-SQL中的电子邮件Error_Message()

该过程可能因各种原因失败。当它确实

IF @returncode > 0 

我生成一个错误邮件给自己。

我想从

error_message() 

程序得到充分的文本,并将其推入正文也。

我已经尝试将我的代码放在Try块中,并将电子邮件发送代码放入catch块中。

我也曾尝试不包括电子邮件从catch块发送代码,并简单地分配ERROR_MESSAGE()结果,而我可以在邮件中引用变量

两个不工作:(

+0

请问您的程序抛出一个异常时,它失败或做它只是返回一个非零返回码? – 3martini

+0

我认为非零错误代码 –

回答

0

要在邮件发送ERROR_MESSAGE(),您需要将其转换为VARCHAR示例下面应该为你工作更新的电子邮件地址和邮件配置文件使用后:

Declare @IsError int = 0 
    Declare @ErrorMessage VARCHAR(MAX) = '' 

    BEGIN TRY 
      -- Send email 
      EXEC msdb.dbo.sp_send_dbmail @recipients = '[email protected]' 
             , @from_Address = 'sqlemail.abc.com' 
             , @body = 'Email Body' 
             , @subject = 'Email Subject' 
             , @body_format = 'HTML' 
             , @profile_name = 'DBProfileName' 
       SET @IsError = @@ERROR 
    END TRY 

    BEGIN CATCH 
      -- Store exception information casting error message to varchar 
      SELECT @IsError = 1, @ErrorMessage = 'Exception message: ' + Cast (Error_Message() as varchar) + ';' 
    END CATCH 

    IF @IsError <> 0 
    BEGIN 
     DECLARE @Subject VARCHAR(250) 
     SELECT @Subject = 'Server Name: ' + @@SERVERNAME + '; Database Name: ' + DB_NAME() + ';' + ' - Email failed' 
     EXEC msdb.dbo.sp_send_dbmail @recipients = '[email protected]' 
            , @from_Address = 'sqlemail.abc.com' 
            , @body = @ErrorMessage 
            , @subject = @Subject 
            , @profile_name = 'DBProfileName' 

     Raiserror('Error encountered while sending email', 16, 1); 

    END 
相关问题