다음을 통해 공유


ERROR_PROCEDURE(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스

이 함수는 해당 오류로 인해 CATCH 구문 블록이 실행된 경우 오류가 발생하는 저장 프로시저 또는 트리거의 TRY...CATCH 이름을 반환합니다.

  • SQL Server 2017(14.x) 이상 버전이 반환됨 schema_name.stored_procedure_name
  • SQL Server 2016(13.x) 및 Azure SQL Database 반환 stored_procedure_name

Transact-SQL 구문 표기 규칙

구문

ERROR_PROCEDURE ( )

반환 형식

nvarchar(128)

반환 값

블록 CATCH 에서 ERROR_PROCEDURE 호출되면 오류가 발생한 저장 프로시저 또는 트리거의 이름을 반환합니다.

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

ERROR_PROCEDURE는 블록 범위 외부에서 호출되면 를 NULL 반환합니다CATCH.

설명

ERROR_PROCEDURE 는 블록 범위 내의 모든 위치에서 호출을 CATCH 지원합니다.

ERROR_PROCEDURECATCH 블록 범위 내에서 실행 위치나 실행 횟수에 관계 없이 오류가 발생하는 저장 프로시저 또는 트리거의 이름을 반환합니다. 이 결과는 오류를 발생시킨 바로 다음 문에 오류 번호만 반환하는 같은 @@ERROR함수와 대조됩니다.

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

A. CATCH 블록에서 ERROR_PROCEDURE 사용

이 예에서는 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. 다른 오류 처리 도구와 함께 CATCH 블록에서 ERROR_PROCEDURE 사용

이 예에서는 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)