sql跨数据库复制表数据

来源:互联网 发布:淘宝怎么退订服务 编辑:程序博客网 时间:2024/05/16 06:23

不同服务器数据库之间的数据操作

不同数据库之间复制表的数据的方法:

当表目标表存在时:

insert into 目的数据库..表 select * from 源数据库..表 

当目标表不存在时:

select * into 目的数据库..表 from 源数据库..表

--如果在不同的SQL之间:

insert into openrowset('sqloledb','目的服务器名';'sa';'',目的数据库.dbo.表)
select * from 源数据库..表


--创建链接服务器
exec sp_addlinkedserver  'ITSV ',' ','SQLOLEDB ', '远程服务器名或ip地址'
exec sp_addlinkedsrvlogin'ITSV ','false ',null,'用户名 ','密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * intofrom ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver'ITSV ','droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--
1、openrowset

--查询示例
select * fromopenrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)

--生成本地表
select * intofrom 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
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ','Data Source=ip/ServerName;User ID=登陆名;Password=密码').数据库.dbo.表名
select * from

-----------------------------------------------------------------------------------------------------------------------------------

好吧,如果上面看得烦下面有个更容易理解的例子:

Exec sp_droplinkedsrvlogin DBVIP,Null
Exec sp_dropserver DBVIP

EXEC sp_addlinkedserver
      @server='DBVIP',--被访问的服务器别名
      @srvproduct='',
      @provider='SQLOLEDB',
      @datasrc='Server2'   --要访问的服务器


EXEC sp_addlinkedsrvlogin
     'DBVIP', --被访问的服务器别名
     'false',
     NULL,
     'sa', --帐号
     'thankyoubobby' --密码


Select   *   from DBVIP.pubs.dbo.orders  


/////////////////////////////ORACLE////////////////////////////
Exec sp_droplinkedsrvlogin demo,Null
Exec sp_dropserver demo
go

EXEC sp_addlinkedserver
        @server ='demo',
        @srvproduct='Oracle',
   @provider='MSDAORA',
   @datasrc='ServiceName'
 

EXEC sp_addlinkedsrvlogin
     'demo',
     'false',
     NULL,
     'userid',
     'password'
go

SELECT * FROM OPENQUERY(demo ,'select * from tbdemo' )

UPDATE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE id = 101')
SET name = 'hello';

INSERT OPENQUERY (demo, 'SELECT id FROM tbdemo')
VALUES ('hello');

DELETE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE name = ''hello''');

-------------------------------------------具体例子------------------------------------------------------------

if   exists(select   1   from   master.dbo.sysservers   where   srvname   =   'test')  
begin  
exec   sp_droplinkedsrvlogin     'test','sa'  
exec   sp_dropserver     'test'  
end 

--建立连接服务器
EXEC sp_addlinkedserver 'test', 'ms','SQLOLEDB', '192.168.1.99'


exec sp_addlinkedsrvlogin 'test','false',null,'sa',''
select * from test.db_film.dbo.T_film
go

if   exists(select   1   from   master.dbo.sysservers   where   srvname   =   'test')  
begin  
exec   sp_droplinkedsrvlogin     'test','sa'  
exec   sp_dropserver     'test'  
end 

go