다음을 통해 공유


ERROR_LINE(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

이 함수는 TRY...CATCH 구문의 CATCH 블록을 실행시키는 오류의 발생 줄 번호를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

ERROR_LINE ( )

반환 형식

int

Return Value

CATCH 블록에서 호출된 경우 ERROR_LINE은 다음을 반환합니다.

  • 오류가 발생한 줄 번호입니다.
  • 오류가 저장 프로시저 또는 트리거 내에서 발생한 경우 루틴의 줄 번호
  • CATCH 블록 범위 밖에서 호출된 경우 NULL입니다.

설명

ERROR_LINE에 대한 호출은 CATCH 블록 범위 내의 어디에서나 발생할 수 있습니다.

ERROR_LINE은 오류가 발생한 줄 번호를 반환합니다. 이는 CATCH 블록의 범위 내에서 위치와 ERROR_LINE 호출의 위치 및 ERROR_LINE에 대한 호출 수에 관계 없이 발생합니다. 이는 @@ERROR 같은 함수와 대조적입니다. @@ERROR는 오류가 발생한 명령문 바로 다음 명령문 또는 CATCH 블록의 첫 번째 명령문에 오류 번호를 반환합니다.

중첩된 CATCH 블록에서 ERROR_LINE은 참조되는 CATCH 블록의 범위에 해당하는 오류 줄 번호를 반환합니다. 예를 들어 TRY...CATCH 구조의 CATCH 블록에는 중첩된 TRY...CATCH 구문이 포함될 수 있습니다. 중첩된 CATCH 블록 내에서 ERROR_LINE은 중첩된 CATCH 블록을 호출한 오류의 줄 번호를 반환합니다. ERROR_LINE이 외부 CATCH 블록에서 실행되는 경우 해당 특정 CATCH 블록을 호출한 오류의 줄 번호를 반환합니다.

예제

A. CATCH 블록에서 ERROR_LINE 사용

이 코드 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. ERROR_LINE은 오류가 발생한 줄 번호를 반환합니다.

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

B. 저장 프로시저의 오류 줄 번호 반환을 위해 CATCH 블록에서 ERROR_LINE 사용

이 예에서는 0으로 나누기 오류를 생성하는 저장 프로시저를 보여 줍니다. ERROR_LINE은 오류가 발생한 줄 번호를 반환합니다.

-- 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_LINE() AS ErrorLine;  
END CATCH;  
GO  

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

이 코드 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. ERROR_LINE은 오류가 발생한 줄 번호 및 오류 자체와 관련된 정보를 반환합니다.

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  

참고 항목

TRY...CATCH(Transact-SQL)
sys.messages(Transact-SQL)
ERROR_NUMBER(Transact-SQL)
ERROR_MESSAGE(Transact-SQL)
ERROR_PROCEDURE(Transact-SQL)
ERROR_SEVERITY(Transact-SQL)
ERROR_STATE(Transact-SQL)
RAISERROR(Transact-SQL)
@@ERROR(Transact-SQL)