Поделиться через


ERROR_PROCEDURE (Transact-SQL)

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

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

Синтаксис

ERROR_PROCEDURE ( )

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

nvarchar(126)

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

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

Возвращает значение NULL, если внутри хранимой процедуры или триггера не произошла ошибка.

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

Замечания

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

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

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

Примеры

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

В примере следующего кода приведена хранимая процедура, вызывающая ошибку деления на 0. Функция ERROR_PROCEDURE возвращает имя хранимой процедуры, в которой возникла ошибка.

USE AdventureWorks2008R2;
GO

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT ERROR_PROCEDURE() AS ErrorProcedure;
END CATCH;
GO

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

В следующем фрагменте кода показана хранимая процедура, которая формирует ошибку деления на 0. Наряду с именем хранимой процедуры, в которой произошла ошибка, возвращаются данные, связанные с ошибкой.

USE AdventureWorks2008R2;
GO

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_MESSAGE() AS ErrorMessage,
        ERROR_LINE() AS ErrorLine;
        END CATCH;
GO