'트랜잭션'에 해당되는 글 1건

  1. 2009/05/10 트랜잭션의 수는 어떻게 될까? (2)
테스트 테이블을 하나 만들었고, 그 테이블에 테스트로 값을 3개를 넣었다.
CREATE TABLE testTbl(id INT IDENTITY(1,1));
SELECT * FROM dbo.testTbl;
이제 트랜잭션의 수를 테스트를 해보자.
BEGIN TRAN
  BEGIN TRAN
    PRINT N'BEGIN 2개 안의 트랜잭션 수 : '+CONVERT(CHAR(1),@@trancount);
  COMMIT TRAN
  PRINT N'BEGIN 1개 안의 트랜잭션 수 : '+CONVERT(CHAR(1),@@trancount);
COMMIT TRAN
PRINT N'COMMIT 후의 트랜잭션 수 : '+CONVERT(CHAR(1),@@trancount);
그럼 이제 롤백을 테스트를 해보자.
 
CREATE TABLE #tranTest(id int);
INSERT INTO #tranTest VALUES(0);
BEGIN TRAN -- 1번째 트랜잭션
  UPDATE #tranTest SET id = 111;
  BEGIN TRAN -- 2번째 트랜잭션
    UPDATE #tranTest SET id = 222;   
    SELECT * FROM #tranTest
  ROLLBACK TRAN -- 1번째 롤백
  SELECT * FROM #tranTest
ROLLBACK TRAN -- 2번째 롤백
SELECT * FROM #tranTest
이 테스트의 결과값은,
에러가 난 이유는 ROLLBACK TRAN은 2번째 트랜잭션까지만 롤백이 될거 같지만, 실제적으로는 1번째 트랜잭션까지 모두 롤백이 되기 때문에, 2번째 롤백은 더 이상 롤백을 할 트랜잭션이 없기때문에 에러가 나는 것이다.

하지만 약간의 쿼리문을 수정을 하면, 원하는 결과가 나온다.
CREATE TABLE #tranTest(id int);
INSERT INTO #tranTest VALUES(0);
BEGIN TRAN -- 1번째 트랜잭션
  UPDATE #tranTest SET id = 111;
  SAVE TRAN [tranPoint1]
    BEGIN TRAN -- 2번째 트랜잭션
    UPDATE #tranTest SET id = 222;   
    SELECT * FROM #tranTest
  ROLLBACK TRAN [tranPoint1] -- 1번째 롤백
  SELECT * FROM #tranTest
ROLLBACK TRAN -- 2번째 롤백
SELECT * FROM #tranTest
저작자 표시 비영리 변경 금지
Posted by 마야울
이전버튼 1 이전버튼