0

複数のサーバーで統計収集を行っているだけで、テストとして、ローカルネットワーク上の自分のマシン (マシン A) と別のマシン (マシン B) で作業しています。

私のマシン (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([Machine B], 'exec SprocName @batchsize) として試したことがありますが、今回は別の方法を試していました。Servername の exec () が 1 つの sprocname だけを操作したい理由を知っている人はいますか? ループしてすべての行をプルしますが、2 番目の sprocname に移動しても、明らかにマシン B は呼び出されません。

パフォーマンス上の理由から、Servername.Table.Schema.Sproc は使用しません。

いくつかの統計:
マシン A - Windows 7 Sql Server 2008 SP1 CU がインストールされていない
マシン B - Windows 2003 Sql Server 2005 SP3 CU がインストールされていない
両方とも、XA トランザクションを除く、これに関連するほとんどすべての MSDTC オプションを持っています。

誰かが実際に私の問題を理解し、助けてくれるなら、前もって感謝します。

4

1 に答える 1

0

時々コードから少し離れる必要があります...戻ってきて、ループロジックの欠陥に気づきました。@rowcount疑似コードはほとんど正しかった...それは私が使っていた変数をリセットしなかった。

于 2009-10-12T21:52:03.073 に答える