Email Error_Message () в T-SQL - PullRequest
       22

Email Error_Message () в T-SQL

0 голосов
/ 16 ноября 2011

У меня есть хранимая процедура, которая перебирает набор записей и прикрепляет файлы к электронному письму, которое затем отправляется пользователю.

Процедура может быть неудачной по разным причинам. Когда это

IF @returncode > 0 

Я генерирую сообщение об ошибке для себя.

Я хотел бы получить полный текст из

error_message()

и вставьте его в текстовое тело.

Я попытался заключить код в блок Try и поместить код отправки электронного письма в блок catch.

Я также пытался исключить код отправки электронного письма из блока catch и просто присвоить результат error_message () переменной, на которую я могу ссылаться в почте

Оба не работают: (

1 Ответ

2 голосов
/ 17 ноября 2011

Чтобы отправить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...