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


ERROR_PROCEDURE (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW)в Microsoft FabricХранилище в Microsoft Fabric

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

  • Возвращаемые версии SQL Server 2017 (14.x) и более поздних версий schema_name.stored_procedure_name
  • Возврат базы данных SQL Server 2016 (13.x) и Базы данных SQL Azure stored_procedure_name

Соглашения о синтаксисе Transact-SQL

Синтаксис

ERROR_PROCEDURE ( )

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

nvarchar(128)

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

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

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

ERROR_PROCEDURE возвращается NULL при вызове за пределами CATCH области блока.

Замечания

ERROR_PROCEDURE поддерживает вызовы в любом месте области CATCH блока.

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

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

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

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

-- 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

Вот результирующий набор.

-----------

(0 row(s) affected)

ErrorProcedure
--------------------
usp_ExampleProc

(1 row(s) affected)

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

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

-- 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

Вот результирующий набор.

-----------

(0 row(s) affected)

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

(1 row(s) affected)