--创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go--查询示例
select * from srv_lnk.数据库名.dbo.表名--导入示例
select * into 表 from srv_lnk.数据库名.dbo.表名--以后不再使用时删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins'
go--如果只是临时访问,可以直接用openrowset
--查询示例
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
--导入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
openrowset可以用下面两个
OPENDATASOURCE或是openquery

解决方案 »

  1.   

    楼主,是不是可以提取远程表的数据,但不可以执行远程的存储过程?在企业管理器中,选择你建立的连接--》属性--》有个RPC选项,选中后就可以执行远程的存储过程
      

  2.   

    感谢楼上的热心回应请大家注意俺遇到的问题:如果@txtContent的值很小,这个@id可以得到返回值。
    但如果@txtContent的值很大(比如超过8000字节),就会返回错误:【未能在远程服务器 'LSName' 上执行过程 'sp_abc'。】
      

  3.   

    比如:我在远程服务器LSNAME上有这么一个存储过程
    CREATE PROCEDURE [dbo].[sp_abc] @txtContent text,
     @id int output AS INSERT INTO tb_abc (txtContent) VALUES(@txtContent)

     SELECT @id = @@identity FROM tb_abc GO
      

  4.   

    CREATE PROCEDURE [dbo].[sp_Serv1]  @txtContent textAS declare @id int execute LSName.SName.dbo.sp_abc @txtContent,@id output GO这是本地我要执行的存储过程,如果@txtContent的值很小,这个@id可以得到返回值的,但如果@txtContent很大,那么,就会报错,说:【未能在远程服务器 'LSName' 上执行过程 'sp_abc'。】而事实上,传过去的@txtContent值也已经插入到LSName.SName.dbo.tb_abc表中了,SELECT @id = @@identity FROM tb_abc 也有值,但这个@id此时无法返回到本地服务器中
      

  5.   

    经过研究,发现问题出在链接服务器的建立方式上,我原来用的是Microsoft OLE DB Provider for ODBC Drivers,现改为Microsoft OLE DB Provider for SQL Server,问题就没出现了 ~~不过里面的原因还不知,还请高人指点一下迷津 :)