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)