데이터베이스/MSSQL

트랜잭션(Transaction)

인공지능싱글톤 2023. 6. 15. 14:35

기본 사용법

USE [데이터베이스 이름] -- 사용할 데이터베이스
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**********************************************************
Author:		만든이
Created:	생성 날짜
Editor:	
Modified:	
Description: 설명

	(실행 예시문)
	exec [dbo].[프로시져 이름] 
    
**********************************************************/
CREATE PROCEDURE [dbo].[프로시져 이름]
AS
BEGIN
	
	SET NOCOUNT ON; -- 몇개의 행이 영향을 받았는지 확인하는 문구 제거 (처리량이 많을경우 사용)
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- 프로시져의 잠금 레벨 READ UNCOMMITTED

	-- 트랜잭션 시작
	BEGIN TRAN
		
		-- sql 작성
		-- 트랜잭션의 경우 INSERT나 DELETE가 2개 이상일경우 사용하면 좋다
		
	-- 트랜잭션 완료
	IF @@ERROR < 0 	BEGIN
    	-- 오류 발생했을때
        ROLLBACK TRAN -- 복구
	END
	ELSE BEGIN
    	-- 오류 없을때
        COMMIT TRAN -- 데이터베이스 영구 반영
	END
    
END
GO

 

예시

USE [MyDataBase]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**********************************************************
Author:		홍길동
Created:	2023-06-15
Editor:	
Modified:	
Description: 게시글 및 댓글 삭제

	exec [dbo].[up_Delete_Board] '84bc1c2db56140b39e35b040e6856457'

**********************************************************/
CREATE PROCEDURE [dbo].[up_Delete_Board](
	@strBoardID uniqueidentifier -- GUID형식 데이터
)
AS
BEGIN
	
	SET NOCOUNT ON;
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

	-- 트랜잭션 시작
	BEGIN TRAN
		
		DELETE FROM [Board] where BoardID = @strBoardID

		DELETE FROM [BoardComment] where BoardID = @strBoardID
		
		
	-- 트랜잭션 완료
	IF @@ERROR < 0 	BEGIN
			ROLLBACK TRAN
	END
	ELSE BEGIN
			COMMIT TRAN
	END
END