Update Trigger 문의

에퀴페 2013.06.12 17:38 Views : 5318

안녕하세요? 초보 에퀴페입니다.
트리거를 만들다가 안되는 부분이 있어서 문의를 드립니다.

다음은 테이블 생성, 트리거 생성, 데이터 입력 스크립트입니다.

 

CREATE TABLE MYTEST(
SEQ int IDENTITY(1,1) NOT NULL,
C_DATE date NOT NULL,
RET char(1) NOT NULL,
E_DATE date NULL,
CONSTRAINT PK_MYTEST PRIMARY KEY CLUSTERED(SEQ ASC)
)
go

 

CREATE TRIGGER TR_MYTEST_E_DATE
ON MYTEST
AFTER INSERT, UPDATE
AS

 DECLARE @varSeq int
 DECLARE @varCdate date
 DECLARE @varRet char(1)

 BEGIN
  SELECT @varSeq = SEQ, @varCdate = C_DATE, @varRet = RET FROM INSERTED

  IF UPDATE (RET)
  BEGIN
   IF @varRet = 'A'
   BEGIN
    UPDATE MYTEST SET E_DATE = DATEADD(Year, 1, C_DATE)  WHERE SEQ = @varSeq
   END
   ELSE IF @varRet = 'B'
   BEGIN
    UPDATE MYTEST SET E_DATE = DATEADD(Year, 2, C_DATE)  WHERE SEQ = @varSeq
   END
   ELSE IF @varRet = 'C'
   BEGIN
    UPDATE MYTEST SET E_DATE = DATEADD(Year, 3, C_DATE)  WHERE SEQ = @varSeq
   END
   ELSE IF @varRet = 'D'
   BEGIN
    UPDATE MYTEST SET E_DATE = DATEADD(Year, 4, C_DATE)  WHERE SEQ = @varSeq
   END
  END
 END
go


INSERT INTO MYTEST (C_DATE, RET) VALUES ('20000101', 'A')
go
INSERT INTO MYTEST (C_DATE, RET) VALUES ('20000101', 'B')
go
INSERT INTO MYTEST (C_DATE, RET) VALUES ('20000101', 'C')
go

 

스크립트에서 보시다시피 RET의 값에 따라 C_DATE에 일정한 값을 더해 E_DATE를 설정하는 트리거입니다.

조회해 보면 아래와 같이 정상적으로 E_DATE 값이 설정됩니다.


SEQ  C_DATE       RET   E_DATE
-------------------------------
1       2000-01-01  A       2001-01-01
2       2000-01-01  B       2002-01-01
3       2000-01-01  C       2003-01-01

 

그런데 문제는 업데이트 되는 Row 가 2개 이상인 경우 첫번째 Row만 트리거가 적용되고 나머지 Row는 적용되지 않습니다.

UPDATE MYTEST SET RET = 'D'

위 쿼리를 실행한 후 조회하면 다음과 같습니다.

 

SEQ  C_DATE       RET   E_DATE
-------------------------------
1       2000-01-01  D       2004-01-01
2       2000-01-01  D       2002-01-01
3       2000-01-01  D       2003-01-01

 

이 문제를 해결하려면 어떻게 해야 할까요?

고견을 부탁드립니다.

감사합니다.

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 466
6889 조건절 where 안에 in 쓰지않고 서브쿼리에 in 처럼 다중 써서 sum 구하는건데 [3] 바보 2013.06.14 5271
6888 쿼리분석기 과 프로그램에서 호출한 프로시저 속도 차이 및 재생성 [4] mr-choi 2013.06.13 5743
6887 특정 조회기간에 따른 쿼리속도문제 [1] 델리스파이스 2013.06.13 6272
6886 sp_help의 결과를 받아 볼 수 있는 방법이 있습니까? [2] 김시준 2013.06.13 6576
6885 sql 2008 미러링시 미러서버에서 장애조치??? 쑤봉e 2013.06.13 4903
6884 쿼리문의 입니다. [10] 다은빈아빠 2013.06.13 4486
6883 엑셀 파을을 업로드해서 DB에 저장하는데요.. [1] 3bong 2013.06.13 9499
6882 sa 계정 비번이 저절로 바뀌는거 같아요 [1] 삐돌이 2013.06.13 5125
6881 혹시.. EDI 시스템에 대해서 설계 해 보신분 계신가요? [1] 다복이 2013.06.13 4491
6880 2012 SSMS 불편 [4] dorhi73 2013.06.12 32906
» Update Trigger 문의 [2] 에퀴페 2013.06.12 5318
6878 sp_rename 하면 테이블 이름외의 변경에 대해서 [1] 전념 2013.06.12 6762
6877 끝 문자열 처리 문의요 [2] afddsa 2013.06.12 4640
6876 뷰에 인덱스 생성하는데 오류발생..문의 [4] pobiblue 2013.06.12 5119
6875 버퍼풀 사용량 제한 관련 문의 드립니다. 수노 2013.06.12 4931
6874 문자열 변환 문의드립니다. [2] 무라무라 2013.06.11 9024
6873 비트맵연산자에 대해서 [1] 맨즈밤 2013.06.11 5064
6872 SQL 질문인데요.. [3] 줄리 2013.06.11 32636
6871 MS SQL Uninstall 관련 질문드립니다. [3] 트리플 2013.06.11 35184
6870 INSERT와 DELETE의 처리시간 및 트랜잭션 로그 사이즈 질문 [1] 이노(inno) 2013.06.11 78266





XE Login