insert 本地库名..表名 select * from OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=远程ip;User ID=sa;Password=密码'
         ).库名.dbo.表名或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin  @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名

解决方案 »

  1.   

    insert 本地库名..表名 select * from OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=远程ip;User ID=sa;Password=密码'
             ).库名.dbo.表名或使用联结服务器:
    EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
    exec sp_addlinkedsrvlogin  @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
    GO
    然后你就可以如下:
    insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
      

  2.   

    insert  OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=远程ip;User ID=sa;Password=密码'
             ).库名.dbo.表名 select * from 本地库表名或使用联结服务器:
    EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
    exec sp_addlinkedsrvlogin  @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
    GO
    然后你就可以如下:
    insert 别名.库名.dbo.表名 select * from 本地库表名
      

  3.   

    --访问不同电脑上的数据库(远程只要联好网就一样)--如果经常访问或数据量大,建议用链接服务器--创建链接服务器
    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.表名go
    --处理完成后删除链接服务器
    exec sp_dropserver 'srv_lnk','droplogins'
      

  4.   


    --如果只是临时访问,可以直接用openrowset
    --查询示例
    select * from openrowset('sqloled'
    ,'sql服务器名';'用户名';'密码'
    ,数据库名.dbo.表名)
    --导入示例
    select * into 表 from openrowset('sqloled'
    ,'sql服务器名';'用户名';'密码'
    ,数据库名.dbo.表名)
      

  5.   

    有问题了,
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'insert into srv_lnk.库名.dbo.表名 select * from 本地表名
    运行出错:
    ole/db provider returned massage:Multiple-step ole db operation generated errors,check each ole db status valus,if available no work was done
    是怎么回事,请回帖
      

  6.   

    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
    go  --这里不能去掉insert into srv_lnk.库名.dbo.表名 select * from 本地表名
      

  7.   

    --如果你是在存储过程中,没必要用链接服务器,直接用openrowset就可以了.
    --如果一定要在存储过程中使用链接服务器,要这样用:
    exec('exec sp_addlinkedserver  ''srv_lnk'','''',''SQLOLEDB'',''远程服务器名或ip地址'''
    exec('exec sp_addlinkedsrvlogin ''srv_lnk'',''false'',null,''用户名'',''密码'''exec('insert into srv_lnk.库名.dbo.表名 select * from 本地表名'
      

  8.   

    你好我用openrowset也有错误提示,帮我看下
    insert into openrowset('sqloled','sql服务器名';'用户名';'密码',数据库名.dbo.表名)select * from tb1出错提示:
    the request for procedure 'tb1' failed because 'tb1' is a table object
      

  9.   

    不好意思上面帖子有误,出现的是这个内容:tb1是本地表和tb2另一台机的表,结构相同你好我用openrowset也有错误提示,帮我看下
    insert into openrowset('sqloled','sql服务器名';'用户名';'密码',数据库名.dbo.tb2)select * from tb1出错提示:
    the request for procedure 'tb2' failed because 'tb2' is a table object
      

  10.   

    提示很清楚啊,连接是成功的,只不过没有tb2这个表,或者tb2不是表,是其他对象而已,检查你的服务器.
      

  11.   

    但明明就有这个表啊,现在提示是because 'tb2' is a table object
    明明就是说tb2是一个表对象啊,怎么回事啊
      

  12.   

    sqloled 是笔误吧?????不然的话,就改sqloledb
      

  13.   

    我的电脑上测试成功:我是这样测试的,首先连接到远程SQL服务器,创建测试的表:
    use pubs
    select * into tb1 from sysobjects where 1<>1
    --然后在本地查询分析器中执行:
    insert into 
    openrowset('sqloledb','ymn';'sa';'',pubs.dbo.tb1)
    select * from sysobjects 结果是成功的.
      

  14.   

    我也想请教此问题,用以上的方法sp_addlinkedserver在查询分析器中是可行的,但在触发器里向远程数据库写值不行,提示"新事务不能登记到指定事务处理器,OLEDB提供程序SQLOLEDB无法启动分布式事务",在局域网内两台SQL服务器之间是可以的。请问为什么?