ERROR_MESSAGE (Transact-SQL)

Возвращает текст сообщения об ошибке, которая возникла в блоке CATCH конструкции TRY…CATCH при выполнении.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

ERROR_MESSAGE ( ) 

Типы возвращаемых данных

nvarchar(2048)

Возвращаемое значение

При вызове в блоке CATCH возвращает полный текст сообщения об ошибке, запустившей блок CATCH. Текст содержит значения подставляемых параметров, таких как длина, имена объектов или время.

Возвращает значение NULL в случае вызова вне блока CATCH.

Замечания

Функция ERROR_MESSAGE может быть вызвана в любом месте области блока CATCH.

Функция ERROR_MESSAGE возвращает сообщение об ошибке независимо от количества ее появлений или от ее конкретного месторасположения внутри блока CATCH. В этом и заключается отличие от таких функций, как @@ERROR, которые только возвращают номер ошибки в инструкции сразу после ее обнаружения или в первой инструкции блока CATCH.

Во вложенных блоках CATCH функция ERROR_MESSAGE возвращает сообщение об ошибке, соответствующее области блока CATCH, в котором она возникла. Например, блок CATCH внешней конструкции TRY...CATCH может содержать вложенную конструкцию TRY...CATCH. Внутри вложенного блока CATCH функция ERROR_MESSAGE возвращает сообщение об ошибке, вызвавшей вложенный блок CATCH. Если функция ERROR_MESSAGE выполняется во внешнем блоке CATCH, она возвращает сообщение об ошибке, вызвавшей этот блок CATCH.

Примеры

А. Использование функции ERROR_MESSAGE в блоке CATCH

В следующем примере кода приведена инструкция SELECT, формирующая ошибку деления на нуль. Возвращается сообщение об ошибке.

USE AdventureWorks2008R2;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

Б. Использование функции ERROR_MESSAGE в блоке CATCH с другими средствами обработки ошибок

В следующем примере кода приведена инструкция SELECT, формирующая ошибку деления на ноль. Вместе с сообщением об ошибке возвращаются сведения, имеющие отношение к ней.

USE AdventureWorks2008R2;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO