반응형
이 포스팅은 MSSQL을 기준으로 작성되었습니다.
트랜잭션에 대한 자세한 설명은 아래의 포스팅을 참고해주세요.
https://luvris2.tistory.com/387
@@TRANCOUNT
- 트랜잭션의 중첩된 수를 나타내주는 시스템 변수
- 트랜잭션이 실행되지 않을 경우 0을 반환
- 트랜잭션의 중첩수에 따라 수를 반환
- 중첩 트랜잭션은 권장하지 않지만, 해당 시스템 변수를 이용하여 트랜잭션이 실행중인지를 확인하기에 유용
트랜잭션 중첩 확인하기
삼중 트랜잭션으로 해당 시스템 변수의 반환값 확인
select @@TRANCOUNT
-- 0 : 트랜잭션이 실행되지 않은 상태
BEGIN TRAN
select @@TRANCOUNT -- 1
-- 1 : 하나의 트랜잭션이 실행된 상태
BEGIN TRAN
select @@TRANCOUNT -- 2
-- 2 : 두개의 트랜잭션이 중첩된 상태
BEGIN TRAN
select @@TRANCOUNT -- 3
-- 3 : 세개의 트랜잭션이 중첩된 상태
COMMIT TRAN
select @@TRANCOUNT -- 2
-- 2: 커밋으로 삼중 트랜잭션 종료, 이중 트랜잭션이 실행된 상태
COMMIT TRAN
select @@TRANCOUNT -- 1
-- 1 : 커밋으로 이중 트랜잭션 종료, 하나의 트랜잭션이 실행된 상태
COMMIT TRAN
select @@TRANCOUNT -- 0
-- 0 : 커밋으로 트랜잭션 종료, 트랜잭션이 실행되지 않은 상태
결론
중첩 트랜잭션 설계 중 실수로 커밋이나 롤백을 하지 않을 경우,
트랜잭션이 종료되지 않아 데이터베이스 제어가 어려울 경우가 생길 수 있다.
그럴 때에 @@TRANCOUNT를 활용하여 트랜잭션이 실행중인지를 확인하기에 유용하다.
반응형