2011-05-13 3 views
4

MERGE 명령을 사용하여 dbo.tableA[mylinkedserver].dbo.TableA을 동기화하는 저장 프로 시저가 있습니다.SQL Server 2008 : 트리거가있는 테이블에서 MERGE 명령을 실행하면 오류가 발생합니다.

TableA에는 이와 관련된 삽입/업데이트 트리거가 있습니다.

OLE DB provider "SQLNCLI10" for linked server "MyLinkedServer" returned message "No transaction is active."

내가 방아쇠를 삭제하고 실행하면 모든 트리거가하는 정말 간단하게 유지하려면 SP가 (닷넷 Windows 응용 프로그램을 통해) 실행

print 'I am a simple trigger because i dont want to cause errors' 

이며,이 오류가 발생합니다 저장된 proc 다시, 그것은 절대적으로 잘 실행합니다.

저장 프로 시저도 SSMS를 통해 실행하면 잘 실행됩니다.

두 서버 모두에서 MSDTC를 사용할 수 있습니다. 윈도우 2008 서버, 2

왜 트리거가이 오류가 발생합니다 서비스 팩 SQL 서버 2008

서버이다?!?!?

+0

가능한 해결 방법 : http://stackoverflow.com/questions/4869977/sql-server-2008-merge-statement-how-to-disable-instead-of-insert-trigger-to-al – Hubbitus

답변

1

병합을 통한 트리거 구현은 약간 까다 롭습니다. "병합 문에 지정된 각 동작에 대해 트리거가 있어야합니다."라는 메시지가 나타납니다.

TechNet "대상 테이블에 MERGE 문에서 수행 한 삽입, 업데이트 또는 삭제 작업에 대해 정의 된 INSTEAD OF 트리거가 정의되어 있으면 지정된 모든 작업에 대해 INSTEAD OF 트리거가 활성화되어 있어야합니다 머지 진술에. "

http://technet.microsoft.com/en-us/library/bb510625.aspx

+0

삽입 (insert), 업데이트 (update), 삭제 (delete)를 위해 3 개의 별도의 트리거를 만들었습니다 (MERGE 명령으로 수행되는 작업 임). 모두 간단한 인쇄 문과 함께. 아직도 운이 없다. 트리거에는 INSTEAD OF가 없습니다. – trainer

+0

필자는 삽입물 하나에 대해서도 하나의 트리거 만 사용해 보았습니다. 아직도 운이 없다. – trainer

+0

이것은 연결된 서버를 모두 제거했다는 것을 의미하며 테이블의 트리거가있는 병합 문만 오류를 일으키는 것입니까? 오류 메시지가 변경 되었습니까? – DavidEdwards

관련 문제