2009-10-12 3 views
0

여러 서버에서 통계 수집을하고 있고 테스트로 로컬 컴퓨터에서 다른 컴퓨터 (컴퓨터 B)와 함께 작업하고 있습니다. 회로망.Windows 7의 SQL Server 2008에서 동적으로 생성 된 분산 쿼리

내 컴퓨터 (A)가 다른 컴퓨터 (B)의 준비 테이블에있는 모든 정보를 수집하고 있습니다. 나는 실행하는 SP를 동적으로 이런 식으로 뭔가를 만듭니다

exec ('exec SprocName ?', 1000) at [Machine B] 

무엇합니까 위의 모든 데이터가 검색 될 때까지이 반복됩니다 머신 B 1000 개 행 배치로 필요한 정보를 당겨입니다.

다른 SprocName을 사용하여 다음에 실행하면 실제로 Machine B를 호출하지 않고 @@ rowcount를 0으로보고 계속 이동합니다. 그것은 단지 위의 문장을 만드는 첫 번째 sproc을 실행합니다.

그래서 사이비 번호 :

while (each sproc) 
{ 
set @qry = exec ('exec SprocName ?', 1000) at [Machine B] 
while (rowcount <> 0) 
{ exec (@qry) } 
} 

난 '* OPENQUERY ([머신 B]에서 선택'간부 SprocName의 @batchsize),하지만이 때 다른 방법을 시도 하였다 이전과이 방법을 시도했다 약. 아무도 왜 Servername에서 exec()가 오직 하나의 sprocname으로 작업하기를 원한다는 것을 알 수 있습니까? 루프를 반복하여 모든 행을 가져 오지만 두 번째 sprocname으로 이동해도 컴퓨터 B는 호출되지 않습니다.

성능상의 이유로 Servername.Table.Schema.Sproc을 사용하지 않을 것입니다.

일부 통계 :
기계 A - 윈도우 7 SQL 서버에는 CU가
기계 B를 설치하지 2008 SP1은 - 윈도우 2003에서는 SQL Server 2005 SP3에는 CU는
모두 대부분 그 모든 MSDTC 옵션을 제외하고이 관련된이 설치되어 있지 XA 트랜잭션.

누구든지 실제로 내 문제를 이해하고 도움을 주시면 미리 감사드립니다.

+1

로직에 문제가있을 확률이 높기 때문에 의사 코드가 아닌 실제 코드를 게시하는 것이 좋습니다. –

답변

0

코드에서 한 번씩 잠시 떨어져 있어야합니다 ... 돌아와서 루핑 논리의 결함을 발견했습니다. psuedo 코드는 대부분 옳았습니다 ... 사용하고 있던 @rowcount 변수를 재설정하지 않았습니다.

관련 문제