怎样将数据库a和数据库b中的表复制到数据库c当中?

时间:2021-03-14 04:27:28
有4台服务器,数据库结构一样,数据不同,现在要将这四台服务器的数据复制到第5台,该怎么建立复制?怎么避免这四台服务器复制的时候不相互覆盖?

5 个解决方案

#1


不在同一服务器上
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','st1'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','stsoft'
go
--访问不同电脑上的数据库

--如果经常访问或数据量大,建议用链接服务器

--创建链接服务器
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'




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


--导入示例
select * into 表 from openrowset('sqloled'
,'sql服务器名';'用户名';'密码'
数据库名.dbo.表名)


#2


在第五台服务器上执行以下语句
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
分别连接四个服务器的数据库

再用
insert into tb 
select * FROM srv_lnk1.数据库名.dbo.TB
UNION ALL 
select * FROM srv_lnk2.数据库名.dbo.TB
UNION ALL
select * FROM srv_lnk3.数据库名.dbo.TB
UNION ALL 
select * FROM srv_lnk4.数据库名.dbo.TB

#3


--任意一台服务器上执行:

insert openrowset('sqloledb','服务器5';'sa';'密码',库.dbo.表)
select * from openrowset('sqloledb','服务器1';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器2';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器3';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器4';'sa';'密码',库.dbo.表)

#4


该怎么建立复制?怎么避免这四台服务器复制的时候不相互覆盖?

数据不同,怎么会覆盖? 

如果用发布/订阅,你考虑用"合并复制"

#5


谢谢诸位,我使用乐发布/订阅,发布的时候过滤一下数据就不会覆盖掉别的数据库的数据了。谢谢诸位

#1


不在同一服务器上
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','st1'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','stsoft'
go
--访问不同电脑上的数据库

--如果经常访问或数据量大,建议用链接服务器

--创建链接服务器
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'




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


--导入示例
select * into 表 from openrowset('sqloled'
,'sql服务器名';'用户名';'密码'
数据库名.dbo.表名)


#2


在第五台服务器上执行以下语句
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
分别连接四个服务器的数据库

再用
insert into tb 
select * FROM srv_lnk1.数据库名.dbo.TB
UNION ALL 
select * FROM srv_lnk2.数据库名.dbo.TB
UNION ALL
select * FROM srv_lnk3.数据库名.dbo.TB
UNION ALL 
select * FROM srv_lnk4.数据库名.dbo.TB

#3


--任意一台服务器上执行:

insert openrowset('sqloledb','服务器5';'sa';'密码',库.dbo.表)
select * from openrowset('sqloledb','服务器1';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器2';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器3';'sa';'密码',库.dbo.表)
union all
select * from openrowset('sqloledb','服务器4';'sa';'密码',库.dbo.表)

#4


该怎么建立复制?怎么避免这四台服务器复制的时候不相互覆盖?

数据不同,怎么会覆盖? 

如果用发布/订阅,你考虑用"合并复制"

#5


谢谢诸位,我使用乐发布/订阅,发布的时候过滤一下数据就不会覆盖掉别的数据库的数据了。谢谢诸位