1. 程序直接连接2个数据库进行数据导入 2. SQL存储过程进行数据导入如果两个数据库在同一个服务器上,可以直接insert into tablename (列名1,列名2...) select (对应列名1,对应列名2...) from [DataBaseName].dbo.tablename 如现在有两个数据库分别位于两个服务器上,先要建立连接服务器 --创建链接服务器 exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码' go
-- insert into tablename (列名1,列名2...) select (对应列名1,对应列名2...) from srv_lnk.[DataBaseName].dbo.tablename --创建链接服务器 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 * from openrowset('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 a inner 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 本地表 3. DTS包 (本人只是了解一点)
2. SQL存储过程进行数据导入如果两个数据库在同一个服务器上,可以直接insert into tablename (列名1,列名2...)
select (对应列名1,对应列名2...) from [DataBaseName].dbo.tablename
如现在有两个数据库分别位于两个服务器上,先要建立连接服务器
--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go
--
insert into tablename (列名1,列名2...)
select (对应列名1,对应列名2...) from srv_lnk.[DataBaseName].dbo.tablename --创建链接服务器
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 * from openrowset('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 a inner 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 本地表 3. DTS包 (本人只是了解一点)
补充一下关于DTS导数据的情况请参考:
http://topic.csdn.net/u/20080410/20/245013ec-7391-44fc-9595-8d8867d47784.html
con1 = 主机1
con2 = 主机2
cmd1 = new sqlcommand(select * from 表 where 列= 值 ,con1 )
con1.open()
dtr1 =
if dtr1.rend() then
cmd2 = new sqlcommand( insert 表 (dtr(列),dtr(列),.....),con2 )
con2.open()
.................
报错:byte[]强制专换string出错