2011-12-13 2 views
3

대상 테이블에서 두 개의 트리거 (삽입 용이고 업데이트 용)가 있습니다. 이제 대상 테이블에서 병합을 실행하면 트리거가 한 번만 실행됩니다. 병합 문은 약 300 개의 업데이트와 200 개의 삽입을 실행하지만.목표 테이블에서 병합 명령문 및 사후 트리거

삭제 된 삽입 된 레코드에서 데이터를 변수로 가져온 직후, 각 트리거의 print 문을 사용하여이를 검사했습니다.

어째서? 이거 버그 야?

SQL Server 2008 sp1 std (SBS2k8의 일부)입니다.

+0

@ gbn의 대답에 따르면 트리거는 전체 문에 대해 한 번 실행되므로 "삭제 된 삽입 된 레코드에서 데이터를 변수로 가져온 직후" 당신이 잘못하고 있다는 것을 의미합니다. 'inserted' 및'deleted' 테이블에는 * multiple * 행이있을 수 있습니다. 이것은'MERGE'와 마찬가지로'INSERT','UPDATE' 및'DELETE' 문장에도 적용됩니다. –

+0

그래서 삽입 된 필드의 레코드 수를 확인하고 커서를 사용하여 각 변경 사항을 로그 테이블에 삽입해야합니까? 아니면 다른 해결책이 있습니까? – pierre

+0

@pierre : 아니오, 그냥 세트로 작업하십시오 – gbn

답변

6

단일 동작 당 트리거가 실행됩니다. "행당"이 아님

한 행에 200 행이 있고 한 행에 300 행이 있습니다. 삽입 및 업데이트, 또는 별도의 트리거에 대해 한 번 각

편집 실행하면

그래서, 트리거가 한 번 실행 : MSDN에서

+0

그래도이 사건이 맞습니까? 해결 방법이 있습니까? 감사 –

관련 문제