준준의 기록일지

[mssql] trigger가 제대로 걸리지 않는 문제 본문

Database

[mssql] trigger가 제대로 걸리지 않는 문제

junjunwon 2020. 11. 13. 11:15

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."




Trigger을 테이블에 생성하고 실행을 했는데, 기존 테이블에서 insert/update/delete가 수행될 때 문제가 발생하는 현상이 있었다.

이때 SET XACT_ABORT OFF 로 해당 문제가 발생해도 전체가 아닌 하나만 롤백되고 메세지를 넘겨주는 작업을 했다.

사실 SET XACT_ABORT OFF만 하면 된다고 했지만, 나는 명령은 잘 실행되도 기존 테이블 수행에 대한 문제는 여전히 가지고 있었다.

 

이 문제 해결법은 바로 TRY/CATCH문!

아래와 같이 try/catch 코드를 넣고 그 사이에 원하는 쿼리문을 넣으면 기존 테이블이 정상 동작하는 것을 확인했다.

조금 의아한건, catch문에 잡히는 오류가 없다는 것.

trigger를 넣는 데이터베이스가 Citrix라 그런것인지 거기에 따른 권한이나?어떤 예외 상황에 대한 처리를 하도록 쿼리가 짜져야 되는건 아닌가 싶다.

SET XACT_ABORT OFF
BEGIN TRY
   -- SELECT convert(int, a) FROM inserted
   SELECT 1 / 0
END TRY
BEGIN CATCH
   IF xact_state() = -1 ROLLBACK TRANSACTION
   PRINT error_message()
END CATCH

 

 

출처

에러에 대한 질의

social.msdn.microsoft.com/Forums/sqlserver/en-US/12199cda-e498-4c2c-ac5c-fafd7cd62791/trigger-error-but-please-do-the-insert?forum=transactsql

 

Trigger Error, but please do the insert

By default, the option XACT_ABORT is ON in a trigger. When this setting is ON, any error that occurs aborts the batch. If there is a CATCH handler, the transaction is doomed and roll back. You can change the rules this way: SET XACT_ABORT OFF in the trigge

social.msdn.microsoft.com

사용방법

bigenergy.tistory.com/825

 

MSSQL Trigger, 트리거 사용방법을 알아보자

오늘은 MSSQL Database의 트리거 사용방법을 알아보도록 하겠습니다. 트리거는 무엇에 쓰는 물건인고?? 테이블에 Insert, Update, Delete 등의 데이터 변화가 생길경우 이 이벤트를 감지해 주는 역

bigenergy.tistory.com