다음을 통해 공유


ERROR_MESSAGE(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

이 함수는 TRY...CATCH 구문의 CATCH 블록을 실행하게 한 오류의 메시지 텍스트를 반환합니다.

Transact-SQL 구문 규칙

구문

ERROR_MESSAGE ( )   

반환 형식

nvarchar(4000)

반환 값

CATCH 블록에서 호출된 경우 ERROR_MESSAGECATCH 블록을 실행시키는 오류 메시지의 전체 텍스트를 반환합니다. 이 텍스트는 대체 가능한 매개 변수(예를 들어 길이, 개체 이름 또는 시간)에 제공된 값을 포함합니다.

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

설명

ERROR_MESSAGE는 CATCH 블록 범위 내의 어떤 위치에서나 호출을 지원합니다.

ERROR_MESSAGECATCH 블록의 범위 내에서 실행되는 경우 실행 횟수 또는 실행 위치에 관계 없이 관련 오류 메시지를 반환합니다. 이것은 오류가 발생한 명령문 바로 다음 명령문에 오류 번호만 반환하는 @@ERROR 같은 함수와 대조적입니다.

중첩된 CATCH 블록에서 ERROR_MESSAGE는 해당 CATCH 블록을 참조한 CATCH 블록의 범위에 관련된 오류 메시지를 반환합니다. 예를 들어 외부 TRY...CATCH 구문의 CATCH 블록에는 내부 TRY...CATCH 구문이 있을 수 있습니다. 해당 내부 CATCH 블록 내에서 ERROR_MESSAGE는 내부 CATCH 블록을 호출한 오류에서 메시지를 반환합니다. ERROR_MESSAGE가 외부 CATCH 블록에서 실행되는 경우 해당 외부 CATCH 블록을 호출한 오류에서 메시지를 반환합니다.

예제

A. CATCH 블록에서 ERROR_MESSAGE 사용

이 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. CATCH 블록은 오류 메시지를 반환합니다.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

결과 집합은 다음과 같습니다.

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

B. 다른 오류 처리 도구로 CATCH 블록에서 ERROR_MESSAGE 사용

이 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. 오류 메시지와 함께 CATCH 블록은 해당 오류에 대한 정보를 반환합니다.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

결과 집합은 다음과 같습니다.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

참고 항목

sys.messages(Transact-SQL)
TRY...CATCH(Transact-SQL)
ERROR_LINE(Transact-SQL)
ERROR_MESSAGE(Transact-SQL)
ERROR_PROCEDURE(Transact-SQL)
ERROR_SEVERITY(Transact-SQL)
ERROR_STATE(Transact-SQL)
RAISERROR(Transact-SQL)
@@ERROR(Transact-SQL)
오류 및 이벤트 참조(데이터베이스 엔진)