工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论、补充。
00.建立测试环境
01.使用SQL Server Import and Export Tool
02.使用Generate Scripts
03.使用BCP
04.使用SqlBulkCopy
05.使用Linked Server进行数据迁移
06.使用RedGate的SQL Data Compare
07.结果对比
可以先看下测试的结果 00.建立测试环境
建立一个测试的环境,一个数据源数据库,版本为SQL Server 2008,一个目标数据库,版本为SQL Server 2000。
实验环境如下图所示,源数据库使用语句生成了100万的测试数据。
建立测试表并生成100万的测试数据
1 IF OBJECT_ID('DEMOTABLE') IS NOT NULL
2 DROP TABLE DEMOTABLE
3 GO
4 CREATE TABLE DEMOTABLE
5 (
6 COL1 VARCHAR(50) ,
7 COL2 VARCHAR(50) ,
8 COL3 VARCHAR(50)
9 )
10 INSERT INTO DEMOTABLE
11 SELECT TOP 1000000
12 NEWID() ,
13 NEWID() ,
14 NEWID()
15 FROM MASTER..SPT_VALUES T1
16 INNER JOIN MASTER..SPT_VALUES T2 ON 1 = 1
17 INNER JOIN MASTER..SPT_VALUES T3 ON 1 = 1 01.使用SQL Server Import and Export Tool
使用SQL Server Import and Export Tool进行数据的导出,也可以在目标数据库端使用Import进行导入,这部分套件也是SSIS的一部分。
在源数据库上右键,选择Task -> Export Data
分别填写源数据库和目标数据库的连接信息。
选择“copy data from one or more tables or views”
选择需要导数据的表,并且可以编辑列的Mapping关系。
可以选择立即执行或者存储为SSIS的包,用于执行计划等其他用途。
这里我们选择立即执行。
注意导入的时候如果遇到如下的错误
Error 0xc02020f4: Data Flow Task: The column "Tel" cannot be processed because more than one code page (936 and 1252) are specified for it.
(SQL Server Import and Export Wizard)
是因为两边的数据库的Collation设置不一样造成的,需要设置同样的Collation。