개발/SQL SERVER

MSSQL Trigger 작성 시 고려사항

whatever , whoever 2024. 9. 30. 17:14
반응형

Trigger 작성 시 INSERT , UPDATE , DELETE 에 모두 대응하는 경우

 

변경된 테이블 내역 중 updated 가 없다는 걸 확인할 수 있다.

INSERTED 와 DELETED 만 있는데 그럼 update는 어떻게 처리하는걸까

 

update 는 실제로는 delete 후 insert 되는 방식이다.

즉 inserted 와  deleted 모두 값이 있는셈.

 

수정하려던 로직이 기존 테이블을 업데이트 하면 다른 테이블의 값을

변경하는 방식이었는데 , deleted 테이블에 있는 값은 실제로 delete 용도로 쓰이지 않고 있었다.

 

그래서 기존 trigger 의 INSERT , UPDATE 의 뼈대는 그대로 두지만

변경되는 테이블의 고유키를 참조해서 실제로 INSERT / UPDATE 유무를 확인하는 플래그를 주고

 

DELETE 로직만 별도로 분리해서 Trigger 를 생성하니 해결되었다.

아 참고로 for / after 는 IUD 쿼리가 작동하지만

instead of 는 해당 IUD 명령이 들어왔을때 Trigger를 수행할 뿐

실제로 IUD 를 수행하지는 않는다. 

무슨 말이냐면 delete from test; 라는 쿼리를 날려도

Trigger 의 내용은 수행되지만 실제 쿼리인 delete from test 는 수행되지 않는다는것.

 

cascade 와 FK 때문에 테이블 만지려고 할때마다 지뢰밭이네; 어휴 이놈의 ERP...

반응형