1. 글로벌 변수 @@ERROR 를 이용한
BEGIN TRAN
INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC')
IF (@@ERROR <> 0)
COMMIT
ELSE
ROLLBACK
ROLLBACK TRAN
2. TRY / CATCH & EXCEPTION 을 이용한
BEGIN TRY
BEGIN TRAN
INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC')
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT '오류번호는 ' + CAST (ERROR_NUMBER() AS VARCHAR)
PRINT '오류심각도는 ' + CAST (ERROR_SEVERITY() AS VARCHAR)
PRINT '오류상태번호는 ' + CAST (ERROR_STATE() AS VARCHAR)
PRINT '오류발생프로시저명은 ' + CAST (ERROR_PROCEDURE() AS VARCHAR)
PRINT '오류발생구문의라인은 ' + CAST (ERROR_LINE() AS VARCHAR)
END CATCH;
3. SET XACT_ABORT ON 를 이용한
SET XACT_ABORT ON -- 오류시 모두 롤백
BEGIN TRAN
INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')
INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC')
COMMIT TRAN
SET XACT_ABORT OFF
그 외에 암시적인 트랜잭션도 있는데, 나도 이 카페 를 보고 찾아가서 테스트를 해본 것이다.
좀 더 세부적인 무결성을 원할때는 3번째 방법에 대해서는 다시 한번 고려를 권장하고 있었다.
반드시 3개의 기능을 테스트 하여, 적재적소를 찾아야 겠다.
제일 좋은 테스트는.. 아무리 생각해봐도 대용량데이터 예제 삼아 날려보는게.ㅋㅋ
'DataBase > MS-SQL' 카테고리의 다른 글
자주 쓰이는 시스템 뷰 (0) | 2013.05.29 |
---|---|
MSSQL [@@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT] (0) | 2013.05.29 |
SQL MD5 함수 (0) | 2013.05.29 |
OPENROWSET (0) | 2013.05.29 |
CHARINDEX 를 이용한 문자열 필터링 (0) | 2013.05.29 |
댓글