DataBase/MS SQL

44.MS_SQL 2008 - 트랜잭션( Tranjection )

Godffs 2009. 9. 18. 09:37
반응형
트랜잭션이란?
SQL문장을 수행 할 때 발생 할 수 있는 오류 부분에 대해서 수정이 가능합니다.
문장을 수행하는데 오류가 있다면 RollBack를 만나 이전상태로 돌아가고
문장을 수행하는데 오류가 없다면 Commit를 만나 안전하게 수행됩니다.


--[1] 트랜잭션관련샘플테이블

Create Table dbo.TranTest

(

       Num Int Identity(1, 1) Not Null Primary Key,

       Name VarChar(25) Not Null,

       PostDate SmallDateTime Default(GetDate())    

)

 

--[2] 샘플데이터입력

Insert Into TranTest(Name) Values('홍길동'),('한라산'),('백두산')

 

--[3] 출력

Select *From TranTest

Go

 

--[4] 트랜잭션테스트(롤백) : Begin Tran~RollBack Tran

       --[a]트랜잭션시작

       Begin Tran

       --[b] SQL 구문실행

       Delete TranTest Where Num = 2

       --[c] 트랜잭션롤백: 트랜잭션이전으로상태돌리기(구문취소...)

       RollBack Tran

 

--[5] 트랜잭션처리: Begin Tran ~ Commit Tran

Begin Tran

       Delete TranTest Where Num = 2 --성공

       Select aaa From aaa           --실패

       Delete TranTest Where Num = 3 --실행되지않음

       If @@ERROR > 0

             RollBack Tran

Commit Tran 

 

--[6] 트랜잭션에별칭부여

Begin Tran

       Delete TranTest Where Num = 3

       Select *From TranTest

RollBack Tran DeleteData

 

--[7] 다중트랜잭션처리

Begin Tran

       Delete TranTest Where Num = 6

       Begin Tran

             Delete TranTest Where Num = 7

             Select @@TRANCOUNT

RollBack Tran --w전체트랜잭션을되돌린다.

Commit Tran

 

Select *From TranTest

 

--[8] 트랜잭션단계확인

Begin Tran

       Update TranTest Set Name = '트랜잭션' Where Num = 8

       Begin Tran

       Update TranTest Set Name = '트랜잭션' Where Num = 9

             Select @@TRANCOUNT --2

RollBack Tran --전체트랜잭션을되돌린다.

Commit Tran

 

--[9] 트랜잭션의주요사용

Begin Tran

       Insert Into TranTest(Name) Values('홍길동')

       Update TranTest Set Name = '트랜잭션' Where Num = 14

       Insert Into TranTest(Name) Values('홍길동')

      

       If @@ERROR > 0 --명시적으로트랜잭션되돌리기

       Begin

             RollBack Tran

       End

Commit Tran

 

--[10] 한번처리에여러개의구문처리시트랜잭션을반드시적용

Begin Tran

       Insert

       Update

       Delete

Commit Tran




반응형