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
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
或使用联结服务器:
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