[MSSQL] TRIGGER

Database 2009.03.27 13:10 Posted by 애플자라


이번 *****증권 업체를 맡아서 TRIGGER를 한번 해봤다.

- 고객테이블에 데이터 변경이 일어나면 무조건,
-- 바뀌기전 데이터와 바뀐후 데이터를, 기록테이블에 저장하는 트리거
CREATE TRIGGER SMSAUTO_LIST_03_INSERT_TRIGGER
ON SMSAUTO_LIST_03
AFTER INSERT
AS
-- SMSAUTO_LIST_03 테이블에 INSERT가 일어나면
-- 이를 NVECARESENDLOG 테이블에 같은 값을 삽입한다.
INSERT INTO NVECARESENDLOG(RESULT_SEQ, CUSTOMER_KEY, CUSTOMER_NM, CUSTOMER_EMAIL, ERROR_CD)
 SELECT RESULT_SEQ, MEMBER_ID AS CUSTOMER_KEY, TO_NAME AS CUSTOMER_NM, TO_PHONE AS CUSTOMER_EMAIL , ERROR_CODE AS ERROR_CD FROM inserted
GO

 

-- SMSAUTO_LIST_03 하는 테이블에 대해서
-- ERROR_CD에 Update가 발생한 경우에 실행되는 트리거
CREATE TRIGGER SMSAUTO_LIST_03_UPDATE_TRIGGER
ON SMSAUTO_LIST_03
AFTER UPDATE
AS
   DECLARE @ECARE_NO VARCHAR(15)
   DECLARE @RESULT_SEQ VARCHAR(16)
   DECLARE @CUSTOMER_KEY VARCHAR(50)
   DECLARE @SEND_DT VARCHAR(8)
   DECLARE @SEND_TM VARCHAR(6)
   DECLARE @ERROR_CD VARCHAR(4)
IF(UPDATE(ERROR_CODE))
BEGIN
  SELECT 
   @RESULT_SEQ = RESULT_SEQ,
   @CUSTOMER_KEY = MEMBER_ID,
   @SEND_DT = CONVERT(CHAR(8),SEND_TIME,112),
   @SEND_TM = REPLACE(CONVERT(VARCHAR(20),SEND_TIME,108),':',''),
   @ERROR_CD = ERROR_CODE
  FROM INSERTED
END
  UPDATE  NVECARESENDLOG
  SET     SEND_DT = @SEND_DT,
             SEND_TM = @SEND_TM,
             ERROR_CD = @ERROR_CD,
             TRIGGER_FLAG='Y',
             TRIGGER_DATE = GETDATE()
  WHERE  RESULT_SEQ = @RESULT_SEQ
  AND     CUSTOMER_KEY = @CUSTOMER_KEY

====================================================

-- SMSAUTO_LIST_03 하는 테이블에 대해서
-- SMSAUTO_LIST_03 테이블에 Update가 발생한 경우에 실행되는 트리거
CREATE TRIGGER SMSAUTO_LIST_03_UPDATE_TRIGGER
ON SMSAUTO_LIST_03
AFTER UPDATE
AS
   DECLARE @ECARE_NO VARCHAR(15)
   DECLARE @RESULT_SEQ VARCHAR(16)
   DECLARE @CUSTOMER_KEY VARCHAR(50)
   DECLARE @SEND_DT VARCHAR(8)
   DECLARE @SEND_TM VARCHAR(6)
   DECLARE @ERROR_CD VARCHAR(4)
IF(COLUMNS_UPDATED() > 0)
BEGIN
  SELECT
   @CUSTOMER_KEY = MEMBER_ID,
   @SEND_DT = CONVERT(CHAR(8),DELIVER_TIME,112),
   @SEND_TM = REPLACE(CONVERT(VARCHAR(20),DELIVER_TIME,108),':',''),
   @ERROR_CD = ERROR_CODE
  FROM INSERTED
END
  UPDATE  NVECARESENDLOG
  SET     SEND_DT = @SEND_DT,
          SEND_TM = @SEND_TM,
   ERROR_CD = @ERROR_CD,
   TRIGGER_FLAG='Y',
   TRIGGER_DATE = GETDATE()
  WHERE  CUSTOMER_KEY = @CUSTOMER_KEY

댓글을 달아 주세요