2009-10-12 63 views
0

我只是在多臺服務器上做一些stat集合,而作爲測試,我正在使用我的機器(機器A)和另一臺機器(機器B)網絡。在Windows 7上動態創建SQL Server 2008中的分佈式查詢

我的機器(A)正在收集來自其他機器(B)的登臺表中的所有信息。我有一個運行SP和動態創建這樣的事情:

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

什麼上面做的是拉從機B. 1000個批處理這將循環,直到所有數據被檢索所需的信息。

下一次運行時,使用不同的SprocName,它實際上不會調用機器B,將@@ rowcount視爲0並繼續。它只運行第一個使其符合上述說明的sproc。

所以僞代碼:

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

我以前嘗試過這種方法爲 'SELECT * FROM OPENQUERY([機器B],' EXEC SprocName @batchsize),但我試圖不同的方法此時周圍。有沒有人知道爲什麼Servername中的exec()只想使用一個sprocname?它會循環並拉動所有行,但移動到第二個sprocname顯然甚至不會呼叫機器B.

我不打算使用Servername.Table.Schema.Sproc出於性能原因。

一些統計:
機A - Windows 7的SQL服務器2008 SP1沒有CU安裝
計算機B - Windows 2003中的SQL Server 2005 SP3沒有CU安裝
兩人都大多都上了MSDTC選項屬於這種除XA交易。

如果有人真的瞭解我的問題並提供幫助,請事先致謝。

+1

您最好發佈真實代碼,而不是僞代碼,因爲問題很可能出現在您的邏輯中。 – 2009-10-12 21:01:02

回答

0

我需要每隔一段時間離開一段代碼......回來後發現了循環邏輯中的缺陷。僞代碼大部分是正確的...它沒有重置我使用的@rowcount變量。