日期:2014-05-17  浏览次数:20511 次

紧急求救 调用远程存储过程无限期执行问题
问题是这样的,我在服务器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
END

A上调用无限期执行的语句
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'


------解决方案--------------------
检查是否存在阻塞甚至死锁。要是开启了跨服务器连接,不需要用exec opendatasource('SQLOLEDB','data source=192.168.210.10;user id=sa;password=yyyyy').TTS.dbo.GETINFO 'dsxin'这样吧?
------解决方案--------------------
SQL code
--先建立连接试试吧
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