1:联结服务器
EXEC sp_addlinkedserver 
   'Test', --名称
   '', 
   'MSDASQL',
   NULL,
   NULL,
   'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器exec sp_addlinkedsrvlogin 'test','false','sa','sa',''2:
use 数据库B
go
create procedure test @row int
as
   insert 表B(字段列表) select 字段列表 from 服务器.数据库A..表A
   set @row = @@rowcount

解决方案 »

  1.   

    2:
    use 数据库B
    go
    create procedure test @row int output
    as
       insert 表B(字段列表) select 字段列表 from 服务器.数据库A..表A
       set @row = @@rowcount
      

  2.   

    select * into 本地库名..表名 from OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=远程ip;User ID=sa;Password=密码'
             ).库名.dbo.表名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
    然后你就可以如下:
    select * from 别名.库名.dbo.表名
    insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
    select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
    go
      

  3.   

    请在查询分析器中创建这个存储过程,以后这个存储过程在企业管理和查询分析器都能修改了。  
     
    对于存储过程,SQL  Server  使用最初创建存储过程时的  SET  ANSI_NULLS  设置值。无论随后何时执行存储过程,SET  ANSI_NULLS  的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用  SET  ANSI_NULLS  时,其设置不更改。  
     
    在执行分布式查询时应将  SET  ANSI_NULLS  设置为  ON。  
     
    在执行分布式查询时应将  ANSI_WARNINGS  设置为  ON。  
     
    企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。就是:
    create proc 名
    as
    SET ANSI_NULL_DFLT_ON on --注意
    SET ANSI_WARNINGS on select * from open...
      

  4.   

    create proc p_update
    as
    declare @re int
    update b..b set 列1=b.列1
    from b..b b inner join(select * from openrowset('SQLOLEDB','其他服务器名';'sa';'',a..a) b on a.id=b.id
    set @re=@@rowcount
    insert into b..b select * from openrowset('SQLOLEDB','其他服务器名';'sa';'',a..a) a where a.id not in(select id from b..b)
    set @re=@@rowcount+@re
    go
    --调用示例:
    declare @re int
    exec @re=p_update
    select 处理记录数=@re
      

  5.   

    --如果这种操作经常进行,最好创建连接其他服务器的链接服务器:exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','服务器名'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
    go
    然后存储过程就可以改为:
    create proc p_update
    as
    declare @re int
    update b..b set 列1=b.列1
    from b..b b inner join srv_lnk.a..a b on a.id=b.id
    set @re=@@rowcount
    insert into b..b select * from srv_lnk.a..a a where a.id not in(select id from b..b)
    set @re=@@rowcount+@re
    go