问题是这样的,我在服务器A上调用服务器B上的存储过程,那个存储过程里会去服务器C抓取数据,B上的存储过程很简单 只从服务器C返回一条2个字段的数据,然后我在A上调用时完全没问题,执行时间小于1秒。但是当我在A上建立个临时表,想把B拿到的结果集插入到A去 就会出现无限期执行的情况。各位大虾有谁碰到过这种问题吗?A的地址为192.168.200.10
B的地址为192.168.210.10
C的地址为192.168.110.10
B上的存储过程
CREATE PROCEDURE TTS.[dbo].[GETINFO]
@CD varchar(6)
AS
BEGIN
SELECT usercd,username FROM oPENDATASOURCE('SQLOLEDB','DATA SOURCE=192.168.110.10;USER ID=sa;password=XXXXX').TESTDB.dbo.users where usercd=@CD
ENDA上调用无限期执行的语句
create table #tmpTABLE
(
cd varchar(10) null,
name varchar(100) null
)
insert into #tmpTABLE (cd, name) 
exec opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy').TTS.dbo.GETINFO 'dsxin'

解决方案 »

  1.   

    可能是你create table #tmpTABLE在A机上,存储过程结果在B机上导致的,啥愿意我也不清楚
    不过可以拐个弯实现,你直接在存储过程内部创建临时表,吧结果写入临时表,在A机通过连接账号读取这个表的内容。(临时表不行的话就建普通的表,写数据之前清空一下)要是楼主找到原因了说一下,我也学习一下。
      

  2.   

    检查是否存在阻塞甚至死锁。要是开启了跨服务器连接,不需要用exec opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy').TTS.dbo.GETINFO 'dsxin'这样吧?
      

  3.   

    exec opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy').TTS.dbo.GETINFO 'dsxin'可能会导致验证账号密码等操作,如果有误又不报错,那就无线等待。
      

  4.   

    --先建立连接试试吧
    exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','192.168.30.21'   
    exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'SA','key123'   
    exec   sp_serveroption   'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程   
    go      
    --调用存储过程示例   
    exec   srv_lnk.DBname.dbo.PROCname   
    go
      

  5.   

    问题是。。如果我单独在A机器上执行exec opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy').TTS.dbo.GETINFO 'dsxin'完全没有问题,执行时间几乎是瞬间的 但当我在这句前加上句Insert into #temptb后,执行就会无限期下去,今天之前还没有任何问题的。数据库服务都重启过了
      

  6.   

    试过 同样是无限期执行 我觉得是数据库问题 不是SQL代码问题
      

  7.   

    你不是有3太服务器吗?试一下换个B来做insert的,这次随便拿个什么来测试,看一下语句有没有问题。
      

  8.   

    如果在一个域里面,试试能不能把:opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy')这里换成windows验证,。
      

  9.   

    各位,今天上午该问题自愈了。目前怀疑是SQL分布式服务的问题,因为昨天在3台机器上不同的库都试过,都存在这问题。所以应该不是某个库的原因,而且昨天服务器确实出现过异常,只是我这边会有A调用B B调用C,所以出问题跟分布式关系蛮大。这次下来 我觉得经常用到的远程数据库,可能还是用链接服务器稳妥一点,但是我不知道是先配好链接服务器合适呢,还是在存储过程里用sp_addlinkedserver 这样建立链接服务好,大家有什么经验分享下吗,我觉得这问题确实蛮妖的,从来没遇到过。
      

  10.   

    最好使用SSIS或者開源的Kettle工具