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가 실행된다.
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을 볼 수 있다.
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 TRAN
과ROLLBACK TRAN
을 적용하면 해결된다.
강의: ms sql 2014 제대로 배우기 2