0

我只是在多台服务器上进行一些统计数据收集,作为测试,我正在本地网络上使用我的机器(机器 A)和另一台机器(机器 B)。

我的机器 (A) 正在从另一台机器 (B) 收集暂存表中的所有信息。我有一个运行并动态创建如下内容的 sp:

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

上面所做的是从机器 B 中提取 1000 行批次所需的信息。这将循环直到检索到所有数据。

下次它使用不同的 SprocName 运行时,它实际上并没有调用机器 B,而是将 @@rowcount 视为 0 并继续前进。它只运行符合上述语句的第一个存储过程。

所以伪代码:

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 () 只想使用一个 sprocname 吗?它将循环并拉出所有行,但移动到第二个 sprocname 显然甚至不会调用机器 B。

出于性能原因,我不会使用 Servername.Table.Schema.Sproc。

一些统计数据:
机器 A - Windows 7 Sql Server 2008 SP1 未安装 CU
机器 B - Windows 2003 Sql SErver 2005 SP3 未安装 CU
两者都具有与此相关的大部分 MSDTC 选项,但 XA 事务除外。

如果有人真正理解我的问题并可以提供帮助,请提前感谢。

4

1 回答 1

0

我需要时不时地远离代码......回来并注意到循环逻辑中的一个缺陷。伪代码大部分是正确的......它没有重置@rowcount我正在使用的变量..

于 2009-10-12T21:52:03.073 回答