티스토리 뷰

SQL/MSSQL

[MSSQL] TRANSACTION 관리

TORO_0513 2021. 2. 15. 22:33
반응형
SELECT A.*
	FROM TBL_SALES A

-- @INT_FAIL을 선언 후 초기값으로 0을 입력
-- 변수값이 0이면 성공, 1이면 실패로 인식
DECLARE @INT_FAIL INT
SET @INT_FAIL = 0

-- 트랜잭션 시작(트랜잭션 선언)
BEGIN TRAN

-- UPDATE 후 에러 및 처리건수를 체크하여 문제가 있으면 실패여부 1
UPDATE A
	SET A.AMOUNT = 15
	FROM TBL_SALES A
	WHERE A.DATE = '20200101'
		AND A.PRODUCT = 'A1'

-- UPDATE문 실행 후 시스템변수 체크
-- 작업 성공은 @@ERROR = 0, @@ROWCOUNT = 1의 경우. 그외의 경우는 모두 실패로 간주
IF @@ERROR <> 0 OR @@ROWCOUNT <> 1 SET @INT_FAIL = 1

-- DELETE 후 에러 및 처리건수를 체크하여 문제가 있으면 실패여부 1
DELETE A
	FROM TBL_SALES A
	WHERE A.DATE = '20200105'
		AND A.PRODUCT = 'A5'

-- 시스템 변수 체크
IF @@ERROR <> 0 OR @@ROWCOUNT <> 1 SET @INT_FAIL = 1

-- 실패여부 변수에 따라 COMMIT 또는 ROLLBACK 처리함
IF @INT_FAIL = 0 BEGIN
	COMMIT TRAN
END ELSE BEGIN
	ROLLBACK TRAN
END

-- 모든 자료를 조회
SELECT A.*
	FROM TBL_SALES A

-- ROLLBACK 처리되어 처음과 동일한 자료가 조회됨

 

* 도서 'MS SQL Server 기본에서 실무까지' 참조

반응형

'SQL > MSSQL' 카테고리의 다른 글

[MSSQL] ORDER BY, OFFSET, FETCH NEXT  (0) 2021.07.04
[MSSQL] 중복 제거  (0) 2021.06.24
[MSSQL] 집계 처리  (0) 2021.06.23
[MSSQL] 인덱스  (0) 2021.02.22
[MSSQL] 오류 및 처리건수 체크 시스템 변수  (0) 2021.02.13
댓글