본문 바로가기

프로그래밍/MSSQL

[MSSQL] RAISERROR 프로시저 오류 처리

반응형

 

 

 

 

 

 

 

 

 

RAISERROR('메시지', 오류심각도, 상태 [옵션])

 

메시지

사용자 정의 메시지 (최대 2,047자)

 

 

오류 심각도

1~10 : 일반 사용자 정보

11~16 : 사용자 정의 오류

17~25 : 시스템 오류

 

- 심각도를 10 이하로 주면 로그만 쌓이고 프로시저 수행에는 아무런 영향을 미치지 않는다.

- 심각도를 11 이상을 주면 실제 오류가 발생되어 프로시저를 호출한 Application에서도 오류가 발생하게 된다.

- 모든 사용자는 0부터 18까지의 심각도를 지정할 수 있고, 19부터 25까지는 sysadmin 고정 서버 역할의 멤버 또는 ALTER TRACE 권한을 가진 사용자만이 지정할 수 있다.

- 20부터 25까지의 심각도는 치명적인 심각도로, 발생 시 클라이언트 연결이 종료되고 오류 및 애플리케이션 로그에 오류가 기록된다.

 

 

상태

- 0에서 255 사이의 정수로 음수 값은 기본적으로 1이다.

- 여러 위치에서 동일한 사용자 정의 오류가 발생하는 경우 각 위치의 고유 상태 번호를 사용하면 코드의 어떤 부분에서 오류가 발생하는지 찾는 데 도움이 된다.

 

 

옵션

 

설명
LOG Microsoft SQL Server 데이터베이스 엔진 인스턴스용 오류 로그 및 애플리케이션 로그에 오류를 기록합니다.
NOWAIT 즉시 클라이언트에게 메세지를 전송합니다.
SETERROR 심각도에 상관없이 @@ERROR과 ERROR_NUMBER 값을 msg_id나 50000으로 설정합니다.

 

 

 

 

 

 

RAISERROR은 SQL Server 데이터베이스 엔진에서 생성되는 시스템 오류나 경고 메시지 같은 형식을 사용하여, 응용 프로그램에 메시지를 다시 반환하는 데 사용한다.

 

DECLARE @result INT;
SET @result = 55/0;

 

 

위에 쿼리는 오류가 발생하지만 TRY CATCH로 묶어주면 오류 발생 시 CATCH로 빠지면서 해당 오류 메시지를 반환하지 않게 된다.

 

이때 RAISERROR를 이용하여 해당 오류 메세지를 반환하도록 한다.

 

 

오류 심각도를 10으로 할 경우 수행에 영향을 미치지 않고, 오류 심각도를 16으로 설정할 경우 실제 오류가 발생하게 된다.

 

BEGIN TRY
	DECLARE @result INT;
	SET @result = 55/0;
END TRY
BEGIN CATCH
	RAISERROR('Error', 10, 1);
END CATCH

 

 

 

BEGIN TRY
	DECLARE @result INT;
	SET @result = 55/0;
END TRY
BEGIN CATCH
	RAISERROR('Error' 16, 1);
END CATCH

 

 

 

 

 

 

 

참고 사이트

https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-ver15

 

 

 

 

 

 

 

 

반응형