在T-SQL中使用Email Error_Message()



我有一个存储过程,它循环遍历记录集并将文件附加到电子邮件中,然后将电子邮件发送给用户。

该过程可能因各种原因而失败。当

IF @returncode > 0 

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

我想从

得到全文
error_message()

过程,并将其推入文本主体。

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

我还尝试从catch块中排除电子邮件发送代码,并简单地将error_message()结果分配给我可以在邮件

中引用的变量。

要在电子邮件中发送error_message(),您需要将其强制转换为varchar。在更新电子邮件地址和使用的邮件配置文件后,下面的示例应该可以为您工作:

    Declare @IsError int = 0
    Declare @ErrorMessage VARCHAR(MAX) = ''
    BEGIN TRY
             -- Send email 
             EXEC msdb.dbo.sp_send_dbmail @recipients = 'Someone@abc.com'
                                        , @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 = 'AlertSupport@abc.com'
                                    , @from_Address = 'sqlemail.abc.com'
                                    , @body = @ErrorMessage
                                    , @subject = @Subject
                                    , @profile_name = 'DBProfileName'
        Raiserror('Error encountered while sending email', 16, 1);
    END

最新更新