2009-10-12 67 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变量。