-
[MSSQL] SP 에러처리DB 2018. 10. 28. 23:00123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869CREATE PROCEDURE [dbo].[SP_TEMP_INSERT_ERROR_LOG](@pi_name varchar(50)='',@pi_age int) ASBEGIN-- DECLARE @crud_count BIGINT ;DECLARE @sp_name NVARCHAR(100) -- 프로시저 이름,@sp_start_date VARCHAR(25) -- 프로시저 실행날짜,@sp_end_date VARCHAR(25) -- 프로시저 종료 날짜,@error_line VARCHAR(50) -- 에러라인,@error_msg NVARCHAR(MAX) -- 에러메세지,@error_number VARCHAR(50) -- 에러행,@error_severity VARCHAR(50) -- 에러심각도SET NOCOUNT ON-- SET XACT_ABORT ONSET @sp_name = 'SP_TEMP_INSERT_ERROR_LOG';/**IF XACT_STATE() = -1BEGINGOTO ERRORHANDLER;END**/BEGIN TRYprint 'TRY 실행';SET @sp_start_date = CONVERT(VARCHAR(25), GETDATE(), 121);BEGIN TRANINSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, @pi_age);INSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, '에러발생시키기'); -- 에러발생INSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, @pi_age+2);COMMIT TRAN;PRINT '커밋 성공'END TRYBEGIN CATCHPRINT 'CATCH 실행';SELECT @error_line=ERROR_LINE(), @error_number=ERROR_NUMBER(), @error_msg=ERROR_MESSAGE(), @error_severity=ERROR_SEVERITY()SET @sp_end_date=CONVERT(varchar(25), GETDATE(), 121);PRINT '에러발생 SP명 ===> ' + @sp_namePRINT '에러라인 ===> ' + @error_linePRINT '에러발생시간 ===> ' + @sp_end_datePRINT '에러번호 ===> ' + @error_numberPRINT '에러 메세지 ===> ' + @error_msgPRINT '에러 심각도 ===> '+ @error_severityROLLBACK TRANEND CATCHEND-- ERRORHANDLER:-- print 'ERRORHANDLER 실행'-- IF XACT_STATE() <> 0-- PRINT '롤백성공';-- ROLLBACK TRAN ;
cs 1exec SP_TEMP_INSERT_ERROR_LOG '민', 28cs ERROR_SEVERITY() - 에러심각도
11~16 : 사용자가 해결 할 수 있는 일반적인 에러
17~19 : 사용자가 해결 할 수 없는 SW오류
20~24 : 시스템의 매우 심각한 오류를 나타냄
자세한 사항은 아래 링크에서 확인
https://docs.microsoft.com/ko-kr/sql/relational-databases/errors-events/database-engine-error-severities?view=sql-server-2017
'DB' 카테고리의 다른 글
[MariaDB] now()와 sysdate()의 차이점 (0) 2018.11.07 테이블 엑세스과정 (0) 2018.10.29 DB 샘플 데이터 생성하는 사이트 (0) 2018.10.20 [MSSQL] 통계(Statistics)보기 (0) 2018.10.15 DEADLOCK_PRIORITY (0) 2018.09.27