ALTER TRIGGER [dbo].[TR_SG_ORD_DETAIL_UPDATE] ON [dbo].[SG_ORD_DETAIL] AFTER UPDATE AS SET NOCOUNT ON declare @upd_uno varchar(20), @sale_no varchar(10), @sale_seq numeric(18,0), @wDate varchar(10), @WAIT_FLAG varchar(10), @CNT_DEL INTEGER ,@CNT_INS INTEGER SELECT @CNT_DEL = COUNT(*) FROM DELETED SELECT @CNT_INS = COUNT(*) FROM INSERTED SELECT @WAIT_FLAG = WAIT_FLAG , @sale_no = sale_no , @sale_seq = SALE_SEQ , @upd_uno = upd_uno , @wDate = CONVERT(VARCHAR(10), GETDATE(),112) FROM inserted IF @CNT_DEL > 0 AND @CNT_INS > 0 AND @WAIT_FLAG = '0' BEGIN UPDATE [dbo].[SG_ORD_DETAIL] SET WAIT_UPD_UNO = @upd_uno , WAIT_UPD_DTM = @wDate WHERE sale_no = @sale_no and SALE_SEQ = @sale_seq END SET NOCOUNT OFF
위는 쿼리구요
특정컬럼이 1에서 0으로 업데이트되면 같은 테이블의 다른 두 컬럼을 업데이트 하는 트리거를 작성중입니다
그런데 트리거가 반응이 없네요...
insert, delete 는 찾아도 잘 나오는데 업데이트문은 잘나오지도 않구요
미리 감사의 말씀 드리겠습니다
---추가설명
SG_ORD_DETAIL 테이블 WAIT_FLAG 라는 컬럼이 1에서 0으로 업데이트 될때 트리거가 걸려서
동일 테이블에 있는 WAIT_UPD_UNO(업데이트유저) 와 WAIT_UPD_DTM(업데이트날자) 컬럼이
업데이트 되는 트리거 입니다
업데이트 유저는 기존 유저 그대로 업데이트 하는게 맞나요?
그럴거면 아예 안하는게 맞을 듯.
ALTER TRIGGER dbo.tr_sg_ord_detail_update ON dbo.sg_ord_detail AFTER UPDATE AS BEGIN UPDATE dbo.sg_ord_detail SET wait_upd_dtm = CONVERT(VARCHAR(10), GETDATE(), 112) FROM dbo.sg_ord_detail t INNER JOIN inserted i ON t.sale_no = i.sale_no AND t.sale_seq = i.sale_seq AND i.wait_flag = '0' END GO
테스트 해봤는데 잘 되네요.
-- 1. 테이블 생성 CREATE TABLE test(idx DECIMAL(2) PRIMARY KEY, flag VARCHAR(1), reg_dt VARCHAR(8)); -- 2. 데이터 입력 INSERT INTO test VALUES(1, '1', null); INSERT INTO test VALUES(2, '1', null); INSERT INTO test VALUES(3, '1', null); -- 3. 트리거 생성 CREATE TRIGGER tr_test ON test AFTER UPDATE AS BEGIN UPDATE test SET reg_dt = CONVERT(VARCHAR(10), GETDATE(), 112) FROM test t INNER JOIN inserted i ON t.idx = i.idx AND i.flag = '0' END GO -- 4. Flag 변경 UPDATE test SET flag = '0' WHERE idx <= 2; -- 5. 결과 확인 SELECT * FROM test; idx flag reg_dt 1 0 20170316 2 0 20170316 3 1 NULL