问题是这样的,我在服务器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'
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'
解决方案 »
- 为何无法向char字段中同时输入汉字和标点符号?(字段长度为10)
- 如何把float转换为varchar
- 库存月报表的问题~~谢谢!
- 求助:如何查看sql 存储过程的执行时间,要显示毫秒级的?
- 如何去除text前后的空格字符
- 怎样写一个这样的函数.
- 新手提问(关于触发器)谢谢各位高手啊。
- 数据库设计的问题讨论,能者为师!
- 急,急,急!帮忙看看!
- ----有两台数据库,如何才能数据同步,我写的sql有错,请高手看看---Thanks??????????????????????
- sql server 2005全文索引突然不能正确索引
- SQL SERVER 2005 的全文索引怎么查不出 c c#这样的关键词?请高手指招……
不过可以拐个弯实现,你直接在存储过程内部创建临时表,吧结果写入临时表,在A机通过连接账号读取这个表的内容。(临时表不行的话就建普通的表,写数据之前清空一下)要是楼主找到原因了说一下,我也学习一下。
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