트리거 생성 및 처리

Hyuntae Jung·2022년 7월 29일
0

MS SQL

목록 보기
33/41
post-thumbnail
post-custom-banner

1. 트리거 생성

USE sampleDB;

CREATE TABLE tran_ex3(
	no INT IDENTITY
	);


CREATE TABLE tran_ex4(
	no INT,
	tranCnt INT
	);
CREATE TRIGGER tranCnt
	ON tran_ex3
	FOR INSERT
AS
	DECLARE @no INT;
	SELECT @no = no FROM INSERTED
	INSERT tran_ex4 VALUES(@no, @@TRANCOUNT) ;

INSERT tran_ex3 DEFAULT VALUES;TRIGGER인 tranCnt가 실행된다.

2. TRAN 중첩

BEGIN TRAN
	BEGIN TRAN
		PRINT '트랜잭션의 수: ' + CAST(@@TRANCOUNT AS CHAR(3));
	COMMIT TRAN
		PRINT '트랜잭션의 수: '+ CAST(@@TRANCOUNT AS NCHAR(3));
COMMIT TRAN

PRINT '트랜잭션의 수: '+ CAST(@@TRANCOUNT AS NCHAR(3));

ldf파일에 BeGIN TRAN 2 -> 1 -> 0 으로 수행중인 TRAN을 볼 수 있다.

3. ROLLBACK

CREATE TABLE tran_rollback_ex1(
	no INT
	);

INSERT tran_rollback_ex1 VALUES (10);

BEGIN TRAN
	UPDATE tran_rollback_ex1 SET no = 100;
	BEGIN TRAN
		UPDATE tran_rollback_ex1 SET no = 200;
		SELECT * 
		  FROM tran_rollback_ex1;
	ROLLBACK TRAN;
	SELECT *
	  FROM tran_rollback_ex1;
ROLLBACK TRAN
SELECT *
  FROM tran_rollback_ex1;

결과창은 다음과 같으나

중간에 오류가 발생한다.

BEGIN TRAN
	UPDATE tran_rollback_ex1 SET no = 100;
	SAVE TRAN [pos1]
	BEGIN TRAN
		UPDATE tran_rollback_ex1 SET no = 200;
		SELECT * 
		  FROM tran_rollback_ex1;
	ROLLBACK TRAN [pos1];
	SELECT *
	  FROM tran_rollback_ex1;
ROLLBACK TRAN
SELECT *
  FROM tran_rollback_ex1;

위와 같이 SAVE TRANROLLBACK TRAN을 적용하면 해결된다.

강의: ms sql 2014 제대로 배우기 2

post-custom-banner

0개의 댓글