Never give up - LEO

人 只有在合适的地方 才能体现出最大的价值
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

急求:分布式查询问题

Posted on 2007-08-24 12:31  lizhiwen  阅读(656)  评论(0编辑  收藏  举报


192.168.1.100上有两个存储过程,ProcA和ProcB,
ProcA调用了ProcB,
ProcB中调用了192.168.1.200上某数据库的表进行查询
在192.168.1.100的查询分析器里运行ProcB,结果和速度都很正常
在192.168.1.100的查询分析器里运行ProcA,等待非常久都没有结果,造成查询分析器死掉

存储过程如下:
CREATE    PROCEDURE  dbo.ProcB
AS
Begin
 SELECT Holidayday FROM [192.168.1.200].CMS.dbo.outtime  
END
GO

CREATE    PROCEDURE  dbo.ProcA
AS
BEGIN
 create table #tbl (Holidayday datetime)
 insert into #tbl exec ProcB
 select * from #tbl
 drop table #tbl
END
GO

把ProcB中调用192.168.1.200表的语句用本地数据库表代替(也就是不存在分布式查询),运行
ProcA和ProcB都很正常,存储过程修改如下:
CREATE    PROCEDURE  dbo.ProcB
AS
Begin
 -----------SELECT Holidayday FROM [192.168.1.200].CMS.dbo.outtime  
 SELECT Holidayday FROM CMS.dbo.tmfHolidaySched_HAI
END
GO

CREATE    PROCEDURE  dbo.ProcA
AS
BEGIN
 create table #tbl (Holidayday datetime)
 insert into #tbl exec ProcB
 select * from #tbl
 drop table #tbl
END
GO

我还做了另外一个测试,存储过程修改如下,就是调用内嵌存储过程时,不进行数据集插入表操作,这样也能顺利运行,但是这样就无法获得子存储过程返回的数据集了:
CREATE    PROCEDURE  dbo.ProcB
AS
Begin
 SELECT Holidayday FROM [192.168.1.200].CMS.dbo.outtime  
END
GO

CREATE    PROCEDURE  dbo.ProcA
AS
BEGIN
 create table #tbl (Holidayday datetime)
 exec ProcB
 select * from #tbl
 drop table #tbl
END
GO


不知道究竟什么原因造成的,我想跟分布式查询可能有一定关系,还请各位赐教!!多谢了!