我只是在多台服务器上进行一些统计数据收集,作为测试,我正在本地网络上使用我的机器(机器 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 事务除外。
如果有人真正理解我的问题并可以提供帮助,请提前感谢。