複数のサーバーで統計収集を行っているだけで、テストとして、ローカルネットワーク上の自分のマシン (マシン 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 オプションを持っています。
誰かが実際に私の問題を理解し、助けてくれるなら、前もって感謝します。