0

한 서버에서 다른 서버로 수백 개의 저장 프로 시저를 마이그레이션하므로 각 서버에 SP를 실행하고 차이점을 비교하기 위해 저장 프로 시저를 작성하려고합니다.Select From SQL Server 저장 프로 시저 Resuchls

select * into #tmp1 from OpenQuery(LocalServer,'exec usp_MyStoredProcedure') 
select * into #tmp2 from OpenQuery(RemoteServer,'exec usp_MyStoredProcedure') 

그때 조합을하고자하고 그 결과에 차이가 얼마나 많은 행 얻을, 수를 수행

이를 위해, 나는 일반적으로 테이블에 결과를 얻을이 구문을 사용합니다 :

select * into #tmp3 
from ((select * from #tmp1) union (select * from #tmp2)) 

select count(*) from #tmp1 
select count(*) from #tmp3 

그러나이 경우, 내 저장 프로 시저는 OpenQuery가 포함되어 있으므로 내가 OpenQueryexec를 넣어하려고 할 때, 쿼리는 오류와 함께 실패 :

The operation could not be performed because OLE DB provider "SQLNCLI" 
for linked server "RemoteServer" was unable to begin a distributed transaction. 

좋은 해결 방법이 있습니까? 아니면이 프로세스를 더 빨리 진행하기 위해 할 수있는 일에 대한 영리한 아이디어가있는 사람이 있습니까? 지금 당장은 각 서버에서 SP를 실행하고 결과를 tmp 테이블로 스크립팅 한 다음 비교 작업을 수행해야합니다. 그게 가난한 해결책처럼 보입니다!

이 글을 읽는 데 시간을내어 주셔서 감사 드리며 어떠한 도움도 크게 받으실 수 있습니다!

답변

0

당신의 방법은 효과가있을 것이라고 생각합니다. MSDTC를 시작하기 만하면됩니다. 분산 트랜잭션 코디네이터 (DTS) 서비스를 사용할 수 없거나 네트워크 DTC 액세스를 사용할 수없는 경우이 문제가 발생합니다. 기본적으로 네트워크 DTC 액세스는 Windows에서 사용할 수 없습니다. 제대로 실행 및 구성하면 OLE DB 공급자가 분산 트랜잭션을 시작할 수 있습니다.

Check out this for instructions는 - 그것은 모든 Windows Server 2003 또는 귀하의 질문에 유사