ERROR_MESSAGE (Transact-SQL)
Возвращает текст сообщения об ошибке, которая возникла в блоке CATCH конструкции TRY…CATCH при выполнении.
Синтаксические обозначения Transact-SQL
Синтаксис
ERROR_MESSAGE ( )
Типы возвращаемых данных
nvarchar(4000)
Возвращаемое значение
При вызове в блоке 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 AdventureWorks2012;
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 AdventureWorks2012;
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