다음을 통해 공유


ERROR_PROCEDURE(Transact-SQL)

TRY...CATCH 구문의 CATCH 블록이 실행되는 오류가 발생한 저장 프로시저나 트리거의 이름을 반환합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

ERROR_PROCEDURE ( )

반환 형식

nvarchar(126)

반환 값

CATCH 블록에서 호출된 경우 오류가 발생한 저장 프로시저 이름을 반환합니다.

오류가 저장 프로시저나 트리거 내에서 발생하지 않은 경우 NULL을 반환합니다.

CATCH 블록 범위 외부에서 호출된 경우 NULL을 반환합니다.

주의

CATCH 블록 범위 내의 아무 위치에서나 ERROR_PROCEDURE를 호출할 수 있습니다.

ERROR_PROCEDURE는 호출 횟수나 CATCH 블록 범위 내에서 호출된 위치에 관계없이 오류가 발생한 저장 프로시저나 트리거의 이름을 반환합니다. 이 함수는 오류가 발생한 함수 바로 다음에 오는 문이나 CATCH 블록의 첫 번째 문에서 오류 번호를 반환하는 @@ERROR와 같은 함수와는 대조됩니다.

중첩된 CATCH 블록에서 ERROR_PROCEDURE는 참조되는 CATCH 블록의 범위에 해당하는 저장 프로시저나 트리거의 이름을 반환합니다. 예를 들어 TRY…CATCH 구문의 CATCH 블록에 중첩된 TRY…CATCH를 사용할 수 있습니다. 중첩된 CATCH 블록 내에서 ERROR_PROCEDURE는 중첩된 CATCH 블록을 호출했으나 오류가 발생한 저장 프로시저나 트리거의 이름을 반환합니다. ERROR_PROCEDURE가 외부 CATCH 블록에서 실행되는 경우 해당 CATCH 블록을 호출했으나 오류가 발생한 저장 프로시저나 트리거의 이름을 반환합니다.

1. CATCH 블록에서 ERROR_PROCEDURE 사용

다음 코드 예에서는 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

2. CATCH 블록에서 다른 오류 처리 도구와 함께 ERROR_PROCEDURE 사용

다음 코드 예에서는 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