一、如果两个数据库在同一台服务器上
1、复制表结构和数据:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA
2、仅仅复制表结构:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA WHERE 1=2
3.拷贝相同表结构的某一行数据:
例
4.更新相同表结构的某一行数据
注:sss是数据表A的别名
二、如果两个数据库在不同的服务器上
分为导出和导入两种,都需要先连接远程数据库,再进行操作。如何连接远程数据库?
在连接远程数据库之前,需要先打开Ad Hoc服务,依次执行下面四句语句(不要一次执行):
EXEC sp_configure "show advanced options",1
RECONFIGURE
EXEC sp_configure "Ad Hoc Distributed Queries",1
RECONFIGURE
这样就可以连接远程数据库了:
SELECT * INTO DatabaseB.dbo.TableB FROM opendatasource( 'SQLOLEDB', 'Data Source=IP/ServerName;User ID=SA;Password=***' ).DatabaseA.dbo.TableA WHERE 1=2
记住,为了安全起见,执行完成之后,请关闭Ad Hoc服务:
EXEC sp_configure "Ad Hoc Distributed Queries",0
RECONFIGURE
EXEC sp_configure "show advanced options",0
-- 创建链接服务器
exec sp_addlinkedserver ' ITSV ' , ' ' , ' SQLOLEDB ' , ' 远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin ' ITSV ' , ' false ' , null , ' 用户名 ' , ' 密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV', 'droplogins'
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * fromopenrowset('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)
--生成本地表
select * into 表from openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)as ainner join 本地表 b
on a.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV', '', 'SQLOLEDB', '远程服务器名或ip地址'
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名 password=密码' ).test.dbo.roy_ta
1、复制表结构和数据:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA
2、仅仅复制表结构:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA WHERE 1=2
3.拷贝相同表结构的某一行数据:
insert into b(a, b, c) select <span style="font-family:宋体;">a,b,c</span> from b;
例
insert INTO B.dbo.third_code_formula( experiment_id,code_formula,porcelain,glass,batch_one,batch_other) select experiment_id,code_formula,porcelain,glass,batch_one,batch_otherfrom third_code_formula WHERE id=25
4.更新相同表结构的某一行数据
update [a].[dbo].[a1]
set name = aaa.name
from [b].[dbo].[b1] as aaa
where [a].[dbo].[a1].[id] = aaa.id
例update B.dbo.third_code_formula
set experiment_id=sss.experiment_id,code_formula=sss.code_formula,porcelain=sss.porcelain,glass=sss.glass,batch_one=sss.batch_one,batch_other=sss.batch_other
from A.dbo.third_code_formula as sss
WHERE B.dbo.third_code_formula.id=sss.id
注:sss是数据表A的别名
二、如果两个数据库在不同的服务器上
分为导出和导入两种,都需要先连接远程数据库,再进行操作。如何连接远程数据库?
在连接远程数据库之前,需要先打开Ad Hoc服务,依次执行下面四句语句(不要一次执行):
EXEC sp_configure "show advanced options",1
RECONFIGURE
EXEC sp_configure "Ad Hoc Distributed Queries",1
RECONFIGURE
这样就可以连接远程数据库了:
SELECT * INTO DatabaseB.dbo.TableB FROM opendatasource( 'SQLOLEDB', 'Data Source=IP/ServerName;User ID=SA;Password=***' ).DatabaseA.dbo.TableA WHERE 1=2
记住,为了安全起见,执行完成之后,请关闭Ad Hoc服务:
EXEC sp_configure "Ad Hoc Distributed Queries",0
RECONFIGURE
EXEC sp_configure "show advanced options",0
RECONFIGURE
三、
两台服务器上两个数据库结构不同的表之间数据复制解决办法!!!
http://www.uipower.com/bbs/thread-35773-1-1.html
/* 不同服务器数据库之间的数据操作 */
-- 创建链接服务器
exec sp_addlinkedserver ' ITSV ' , ' ' , ' SQLOLEDB ' , ' 远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin ' ITSV ' , ' false ' , null , ' 用户名 ' , ' 密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV', 'droplogins'
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * fromopenrowset('SQLOLEDB ', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)
--生成本地表
select * into 表from openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)as ainner join 本地表 b
on a.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV', '', 'SQLOLEDB', '远程服务器名或ip地址'
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名 password=密码' ).test.dbo.roy_ta
本文提供了一种解决两台服务器上结构不同的数据库表之间数据复制的方法,适用于需要保持数据同步的场景。
9563

被折叠的 条评论
为什么被折叠?



