관리 메뉴

안까먹을라고 쓰는 블로그

[MSSQL] 트리거(Trigger) 본문

DataBase/MS SQL

[MSSQL] 트리거(Trigger)

YawnsDuzin 2022. 9. 26. 16:16

 

반응형

트리거(Trigger)

 - 특정 테이블에 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생하면 DBMS에서 자동적으로 실행되도록 구현 된 프로그램 입니다.
 - 이벤트는 전체 트랜잭션 대상과 각행에 의해 발생되는 경우 모두를 포함할 수 있으며, 테이블과 뷰, DB 작업을 대상으로 정의할 수 있습니다.

트리거의 목적
 - 특정 테이블에 대한 데이터 변경을 시작점으로 설정하고, 그와 관련된 작업을 자동적으로 수행하기 위해 트리거를 사용합니다.
 - 일반적으로 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는데 활용합니다.


트리거 예제소스
 - ON [NEOE].[PU_POL] 과 같이 적용할 테이블을 지정
 - AFTER UPDATE/INSERT/DELETE 등의 트리거를 적용할 작업 지정
   . BEFORE, AFTER, INSTEAD OF 적용가능
 - 업데이트 작업 시, 기존의 데이터는 삭제하고, 추가작업을 하는 방법으로 처리 됨.
    . INSERTED : 업데이터 후의 데이터
    . DELETED : 업데이터 전의 데이터

USE [NEOE]
GO

/****** Object:  Trigger [NEOE].[TU_PU_POL]    Script Date: 2022-09-26 오후 12:45:26 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER  [NEOE].[TU_Z_AUTON_PU_POL] ON [NEOE].[PU_POL] AFTER UPDATE    
AS    
BEGIN    
	 DECLARE    
	 @NUMROWS				INT,    
	 @ERRNO					INT,    
	 @ERRMSG            	NVARCHAR(255),    

	 @CD_COMPANY			NVARCHAR(7),
	 @NO_PO					NVARCHAR(20), 

	 @FG_POST_BEFORE		NCHAR(3),
	 @FG_POST_AFTER			NCHAR(3)
     
	 SELECT @NUMROWS = @@ROWCOUNT
	 IF @NUMROWS = 0
		RETURN     

	IF UPDATE(FG_POST)
	BEGIN
		SELECT 
		@CD_COMPANY = I.CD_COMPANY, @NO_PO = I.NO_PO,
		@FG_POST_AFTER = I.FG_POST, @FG_POST_BEFORE = D.FG_POST
		FROM INSERTED I INNER JOIN DELETED D
		ON I.CD_COMPANY    = D.CD_COMPANY
		AND I.NO_PO         = D.NO_PO
		AND I.NO_LINE       = D.NO_LINE

		IF @FG_POST_BEFORE = 'R' AND @FG_POST_AFTER = 'O'			-- 'R'확정 -> 'O'미정
		BEGIN
			UPDATE PU_POH SET TXT_USERDEF4 = 'N'
			WHERE CD_COMPANY = @CD_COMPANY
			AND NO_PO = @NO_PO
		END

		IF @FG_POST_BEFORE = 'O' AND @FG_POST_AFTER = 'R'			-- 'O'미정 -> 'R'확정
		BEGIN
			UPDATE PU_POH SET TXT_USERDEF1 = 'N'
			WHERE CD_COMPANY = @CD_COMPANY
			AND NO_PO = @NO_PO
			AND TXT_USERDEF4 = 'N'
		END
	END
 
    
END
GO


끝~

반응형
Comments