因为是远程服务器数据关联的问题,如果调用链接服务器对远程服务器的数据库里表取数据,会慢很多,
所以想通过执行远程服务器的存储过程把结果集返回到本地的服务器,这样速度应该会快很多!例子:exec [192.168.1.200].Database01.dbo.存储过程名(我这样是行不通的,但是意思就是这样)
把结果集返回给本地的服务器(也是存储过程,可以是临时表),请问如何实现?谢谢!

解决方案 »

  1.   

    应该可以的create table #t(....)
    insert #t exec [192.168.1.200].Database01.dbo.存储过程名 参数
    注意,链接服务器的RPC必须打开
      

  2.   


    exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','10.100.1.38'   
    exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa','' 
    exec   sp_serveroption 'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程
    go   
        
    --查询示例   
    exec srv_lnk.DingFangTest.dbo.Show_User_Rights '266','frmOrderFax' 
    go   
    --以后不再使用时删除链接服务器   
    exec   sp_dropserver 'srv_lnk','droplogins'    http://hi.baidu.com/zsjfd/blog/item/ec61c5d688477c2906088b4e.html
      

  3.   

    链接服务器,opendatasource,openrowset
      

  4.   

    可以链接服务器属性》服务器选项》RPC 为true。
      

  5.   

    我的是MS SQL 2005版本,可能执行语句需要改动一下!
      

  6.   

    alter proc a
    as
    begin
    select * from ab
    end
     
    exec sp_serveroption xie,'data access',true 设置自已的服务器为链接服务器select * into #1  from  openquery(xie,'Exec test1.dbo.a')  后面访问的时候必须要用test1.dbo.a访问
    以上方法用来处理把存储过程返回的结果与别外一个表相连
      

  7.   

         Create Table #Temp2(...)
         insert #Temp2
         exec [192.168.1.200].Database01.dbo.Production001
         select * from #Temp2
         Drop Table #Temp2     执行不成功啊!#Temp2的字段与exec [192.168.1.200].Database01.dbo.Production001返回的结果集的字段名、长度、类型及顺序等都是一样的。
         
         exec [192.168.1.200].Database01.dbo.Production001 执行成功!
          请问是哪里的问题?谢谢!!!
      

  8.   

    链接服务器,opendatasource,openrowset
      

  9.   


    --try:
    Create Table #Temp2(col列表)
    insert #Temp2 exec [192.168.1.200].Database01..Production001
      

  10.   


    出现如下的提示:OLE DB provider "SQLNCLI" for linked server "192.168.1.200" returned message "此事务已明地或暗地被确认或终止".消息 7391,级别 16,状态 2,第 2 行
    The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "192.168.1.200" was unable to begin a distributed transaction.
      

  11.   

    --加上下面两句,否则会提示新事务不能登记到指定事务处理器
    set    xact_abort   on  
    begin  distributed   tran 
    Create Table #Temp2(col列表)
    insert #Temp2 exec [192.168.1.200].Database01..Production001commit tran
      

  12.   

    Create Table #Temp2(col列表)
    insert #Temp2 exec [192.168.1.200].Database01..Production001--添加链接服务器
    exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','10.100.1.38'   
    exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa','' 
    exec   sp_serveroption 'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程
    go  Create Table #Temp2(col列表)
    insert #Temp2 exec srv_lnk.Database01.dbo.Production001
      

  13.   

    现在补充几个问题点:
    1、已经在数据库服务器里添加了链接服务器;
    2、已经设置好了用户名,密码,远程服务器及数据库名等。所以
    exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','10.100.1.38'   
    exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa','' 没有必要再次执行!执行以下SQL语句:
    Create Table #Temp2(col列表)
    insert #Temp2 exec srv_lnk.Database01.dbo.Production001问题依然!谢谢!!!
      

  14.   

    服务器: 消息 7403,级别 16,状态 1,行 1
    未能找到 OLE DB 提供程序 '127.0.0.1' 的注册表项。
    OLE DB 错误跟踪[Non-interface error:  Provider not registered.]。什么错?
      

  15.   

    自己找到一种处理方法
    就是把远程服务器的SQL存储过程的执行结果存储为一个表,然后在本地服务器里调用那个表的结果
    这样就没有那么麻烦了!