#1
앞서 말했듯이 오라클과는 달리 MSSQL에서는 기본적 옵션이 AUTO COMMIT이다.
그래서 BEGIN TRAN ~ ROLLBACK TRAN으로 실행하고자 하는 쿼리문을 감싸고 수행해보는게 정신건강상 안전하지만 쿼리문에 해당하는 레코드수가 천만단위가 넘어가는데 그런짓 하고 있으면 욕 대번 먹는거다.
- BEGIN TRAN
- SELECT ‘A’
- SELECT @@TRANCOUNT
- BEGIN TRAN
- SELECT ‘B’
- SELECT @@TRANCOUNT
- ROLLBACK TRAN
- SELECT @@TRANCOUNT
- ROLLBACK TRAN
SELECT @@TRANCOUNT 구문은 현재 세션에서의 활성화된 트랜잭션의 갯수를 출력해준다.
위의 쿼리문에서 2번까지 실행한 후 3번을 실행한후 결과는 다음과 같다.
A
1
현재 세션에서 활성화된 트랜잭션은 1개.
5번까지 실행한 후 6번을 통해 다시 트랜잭션의 갯수를 출력하면 결과는 당연히,
2
7번 구문은 현재 활성화된 트랜잭션을 ROLLBACK하는 명령어다.
그렇다면 7번 수행후 8번의 값은?
#2
반면 같은 예제에서 ROLLBACK을 모두 COMMIT으로 바꿔보면
- BEGIN TRAN
- SELECT ‘A’
- SELECT @@TRANCOUNT
- BEGIN TRAN
- SELECT ‘B’
- SELECT @@TRANCOUNT
- COMMIT TRAN
- SELECT @@TRANCOUNT
- COMMIT TRAN
6번까지의 수행결과는 같다.
@@TRANCOUNT의 값은 2
하지만 7번을 수행한 후 위의 8번의 값은?
