대상 테이블에서 두 개의 트리거 (삽입 용이고 업데이트 용)가 있습니다. 이제 대상 테이블에서 병합을 실행하면 트리거가 한 번만 실행됩니다. 병합 문은 약 300 개의 업데이트와 200 개의 삽입을 실행하지만.목표 테이블에서 병합 명령문 및 사후 트리거
삭제 된 삽입 된 레코드에서 데이터를 변수로 가져온 직후, 각 트리거의 print 문을 사용하여이를 검사했습니다.
어째서? 이거 버그 야?
SQL Server 2008 sp1 std (SBS2k8의 일부)입니다.
@ gbn의 대답에 따르면 트리거는 전체 문에 대해 한 번 실행되므로 "삭제 된 삽입 된 레코드에서 데이터를 변수로 가져온 직후" 당신이 잘못하고 있다는 것을 의미합니다. 'inserted' 및'deleted' 테이블에는 * multiple * 행이있을 수 있습니다. 이것은'MERGE'와 마찬가지로'INSERT','UPDATE' 및'DELETE' 문장에도 적용됩니다. –
그래서 삽입 된 필드의 레코드 수를 확인하고 커서를 사용하여 각 변경 사항을 로그 테이블에 삽입해야합니까? 아니면 다른 해결책이 있습니까? – pierre
@pierre : 아니오, 그냥 세트로 작업하십시오 – gbn