원격지에 있는 데이터베이스와 로컬에 설치된 데이터베이스 사이에서 특정 테이블의 데이터를
동기화하기 위해서 MSSQL Trigger 기능을 사용해 보고 있습니다.
그런데 트리거를 이용해 동기화를 하다보니 동기화가 되는 순간에 다시 트리거가 동작하게 되어
이중삼중으로 핑퐁치게되버리는 현상이 생겼습니다.
그래서 동기화 작업을 수행할 때는 테이블에 걸려있는 트리거를 멈춰두고 동기화작업 완료 후
다시 트리거를 활성화 시켜줘야 하더라고요.
MSSQL 트리거 활성화/비활성화 명령어
--트리거 활성화 명령어 (trigger off)
ENABLE TRIGGER TRG_POINTDEF ON DBTest.dbo.POINTDEF;
--트리거 비활성화 명령어 (trigger on)
DISABLE TRIGGER TRG_POINTDEF ON DBTest.dbo.POINTDEF;
그런데 이 명령어는 MSSQL 프로시져 안에서 그대로 사용할 순 없어요.
저장프로시져라는 특성상 별도의 명령어인 exec()를 통해 실행해줘야합니다.
아래와 같이 exec() 명령어를 통해 프로시져안에서도 트리거의 사용과 중지 명령을 수행할 수 있었습니다.
프로시져안에서 트리거 사용/미사용 명령어 사용방법
--트리거 실행 명령어
exec('ENABLE TRIGGER TRG_POINTDEF ON DBTest.dbo.POINTDEF')
--트리거 중지 명령어
exec('DISABLE TRIGGER TRG_POINTDEF ON DBTest.dbo.POINTDEF')
MSSQL 트리거 참고
댓글