새소식

DataBase/MSSQL

[MSSQL] Try Catch 문을 사용한 트랜잭션(taransaction) 컨트롤 방법

  • -

프로시저 및 DB 작업시 현재는 잘 작동하는 프로그램이 칼럼의 추가, 데이터 타입의 변화, 그 밖의 많은 상황에서 오류가 발생하는 경우가 존재합니다. 이때 트랜잭션이 걸려있지 않은 경우 일부 데이터만 처리가 되는 매우 심각한 오류가 발생할 수 있습니다.

 

MSSQL SERVER는 이러한 상황에 대해 SQL 실행시 오류를 컨트롤 할 수 있도록 Try Catch 문을 제공하고 있습니다.

그리고 Try Catch와 Transaction처리를 통해 데이터 정합성을 보장할 수 있습니다.

 

 

사용법은 간단합니다.

BEGIN TRY //실행할 SQL 문입력 END TRY BEGIN CATCH //예외 상황 발생시 처리 END CATCH

 

 

간단하게 테스트를 한번 해보겠습니다.

우선 아래의 테이블을 생성해 줍니다.

CREATE TABLE TestTran ( Id INT IDENTITY(0,1), NAME NVARCHAR(200) )

 

아래의 코드를 실행시

SET NOCOUNT ON DECLARE @NUM INT --트랜잭션 실행 BEGIN TRAN BEGIN TRY --데이터 삽입 INSERT INTO TestTran(NAME) SELECT '옴티' --해당 구문에서 0나누기 오류 발생 SELECT @NUM = 1/0 END TRY BEGIN CATCH PRINT 'Catch 문이 실행되었습니다.' DECLARE @ERROR_MESSAGE NVARCHAR(4000), @ERROR_SEVERITY INT , @ERROR_STATE INT , @ERROR_PROCEDURE NVARCHAR(128) SELECT @ERROR_MESSAGE = ERROR_MESSAGE() , @ERROR_SEVERITY = ERROR_SEVERITY() , @ERROR_STATE = ERROR_STATE() , @ERROR_PROCEDURE = ERROR_PROCEDURE() RAISERROR (@ERROR_MESSAGE, @ERROR_SEVERITY, @ERROR_STATE, @ERROR_PROCEDURE) --오류 발생시 롤백 후 리턴 ROLLBACK TRAN RETURN END CATCH --오류가 발생하지 않았을시 COMMIT COMMIT TRAN GO --데이터 출력 SELECT * FROM TestTran

 

 

 

출력결과를 보면 TestTran 테이블에 Insert를 했음에도 불구하고 데이터가 조회되지 않는데 

이는 Catch문에서 예외상황이 발생할 시 Transaction에 대해 Rollback 처리를 했기 때문입니다.

 

 

또한 위에 Catch 문에서 사용한 이 SQL문은 Try Catch는 오류에 대해 전적으로 사용자에게 처리를 맡기기 때문에 해당 구문으로 메시지를 표시하지 않는다면 따로 결과창에 표시가 되지 않습니다.

DECLARE @ERROR_MESSAGE NVARCHAR(4000), @ERROR_SEVERITY INT , @ERROR_STATE INT , @ERROR_PROCEDURE NVARCHAR(128) SELECT @ERROR_MESSAGE = ERROR_MESSAGE() , @ERROR_SEVERITY = ERROR_SEVERITY() , @ERROR_STATE = ERROR_STATE() , @ERROR_PROCEDURE = ERROR_PROCEDURE() RAISERROR (@ERROR_MESSAGE, @ERROR_SEVERITY, @ERROR_STATE, @ERROR_PROCEDURE)

 

아래의 그림은 해당 오류 메시지 처리구문을 주석 처리한 후 실행한 결과입니다.

 

 

이처럼 Try Catch 문을 잘 사용한다면 어떠한 상황에서도 데이터 정합성을 보장할 수 있기 때문에 꼭 알아두도록 합시다

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.