ERROR_MESSAGE (Transact-SQL)

Применимо к: даSQL Server (все поддерживаемые версии) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

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

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

Синтаксис

ERROR_MESSAGE ( )   

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

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

nvarchar(4000)

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

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

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

Remarks

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

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

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

Примеры

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

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

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

Результирующий набор:

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

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

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

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  

Результирующий набор:

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure  ErrorLine  ErrorMessage
----------- ------------- ----------- --------------- ---------- ----------------------------------
8134        16            1           NULL            4          Divide by zero error encountered.

(1 row(s) affected)

См. также:

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Справочник по ошибкам и событиям (компонент Database Engine)