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


ERROR_PROCEDURE (Transact-SQL)

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

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

  • SQL Server 2017 с возвратом текущей версииschema_name.stored_procedure_name
  • Возвращается SQL Server 2016 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)

B. Использование функции 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)

См. также

sys.messages (Transact-SQL)
ПОПЫТКА... CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)