CREATE TRIGGER [dbo].[EMPLOYEE_TRIG_I]
ON [dbo].[employee]
for INSERT ---- for를 after로 바꿀시 2건 들어감.
AS
BEGIN
SET NOCOUNT ON;
DECLARE @EXISTS_VAL INT;
DECLARE @MAXSEQ INT;
--NEW값
DECLARE @N_EMP_NO VARCHAR(7);
DECLARE TRIGGER_CUR CURSOR FOR
SELECT EMP_NO
FROM INSERTED
;
OPEN TRIGGER_CUR
WHILE(1=1)
BEGIN
FETCH NEXT FROM TRIGGER_CUR INTO @N_EMP_NO
IF(@@FETCH_STATUS <> 0)
BREAK
;
SELECT @EXISTS_VAL = COUNT(*) FROM MARTDB..EMPLOYEE_HISTORY
WHERE EMP_NO = @N_EMP_NO
AND FROM_DATE= CONVERT(CHAR(8), GETDATE(), 112)
;
SELECT @MAXSEQ = MAX(SEQ) FROM MARTDB..EMPLOYEE_HISTORY
WHERE EMP_NO = @N_EMP_NO
AND FROM_DATE= CONVERT(CHAR(8), GETDATE(), 112)
;
--신규 정보로 넣음
INSERT INTO EMPLOYEE_HISTORY
(
EMP_NO
,FROM_DATE
,TO_DATE
,SEQ
,JOB_FLAG
)
VALUES(@N_EMP_NO
,CONVERT(CHAR(8), GETDATE(), 112)
,'29991231'
,1 + CASE WHEN @EXISTS_VAL > 0 THEN @MAXSEQ ELSE 0 END
,'I'
)
END
CLOSE TRIGGER_CUR;
DEALLOCATE TRIGGER_CUR;
SET NOCOUNT OFF;
END
사번테이블에 트리거를 걸려는데요,
EMPLOYEE테이블에 저장이 되면 EMPLOYEE_HISTORY에 FROM ~ TO로 히스토리 남길려고 하는데요.
위와같이 작성했는데 FOR를 AFTER로 바꾸면 2건씩 들어갑니다.
인터넷에서 찾아보니 FOR와 AFTER이 동일하다고 하는데 이유가 뭔지 모르겠네요. |