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
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 (2) | 2021.06.10 |
---|---|
[MSSQL] ALL, ANY, SOME (하위 쿼리에서 값을 둘 이상 반환했습니다.) (0) | 2021.02.26 |
[MSSQL] GROUP BY COUNT (NULL 포함 집계) (0) | 2021.02.24 |
[MSSQL] XML 문자 파싱 오류 (XML 구문 분석: 잘못된 xml 문자입니다.) (0) | 2021.01.11 |
[MSSQL] 다중 칼럼 PIVOT 처리 (복수개의 열 행렬 변환) (0) | 2020.12.08 |