作者 Haidong Ji 翻译 GoodKid 原文Original
从Sql Server移植数据到 MySQL, 当然可以通过相关工具实现,它们可以建立连接,实现数据存储和数据操作,像 Access, Excel,或 SSIS。现在我将介绍一种不需要任何工具和驱动的方法。 对于一个标准的 Sql Server 和 MySQL 安装,我们可以使用这个方法完成这个任务。
使用这个手段,首先假设在MySQL中已经存在匹配 表,否则,要首先创建它们。
实现过程包括的步骤: 首先基于Sql Server 数据库元数据生成bcp(bootstrap command processor ) 命令 (sysobjects, 考虑MySql中的 information_schema);接下来运行生成的 bcp 命令;获得的 csv 文件可以被传输到 MySQL server上,如果尺寸较大可以考虑压缩文件;最终csv 文件将通过LOAD DATA LOCAL INFILE 命令导入到 MySQL 中。
1. 在 Sql Server 上运行下列代码以产生 bcp 命令,根据具体情况修改备份文件夹名称和数据库名称。数据库名称对应 MyDb,两处需要修改。
01.
set
nocount
on
02.
03.
/*
Set
BackupFolder
name
here */
04.
declare
@BackupFolder
varchar
(100)
05.
set
@BackupFolder =
'c:/MyDataDumpFolder/'
06.
07.
/* Initialize variables here */
08.
declare @TableNames table (TableTempID
09.
smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, TableName varchar(50))
10.
declare @TableName varchar(50)
11.
declare @BackupFileName char(50)
12.
declare @BackupFolderFile varchar(150)
13.
declare @Counter smallint
14.
declare @MaxTableCount smallint
15.
declare @BCPOutCommand varchar(500)
16.
17.
/* Get the list of tables that we want to dump out as csv */
18.
insert into @TableNames (TableName) select name from
19.
MyDb.dbo.sysobjects where xtype = '
U
'
20.
and name not in ('
dtproperties
')
21.
22.
select @MaxTableCount = max(TableTempID) from @TableNames
23.
set @Counter = 1
24.
25.
/* Loop through all each table individually, generate bcp
26.
commands and run bcp commands to export data */
27.
while @Counter < = @MaxTableCount
28.
29.
Begin
30.
31.
/* Create backup file name */
32.
select @TableName = ltrim(rtrim(TableName)) from
33.
@TableNames where TableTempID = @Counter
34.
35.
select @BackupFileName = ltrim(rtrim(@TableName)) + '
.txt
'
36.
37.
/* Combine backup folder name and file name */
38.
select @BackupFolderFile = @BackupFolder + @BackupFileName
39.
40.
/* Create BCP command */
41.
select @BCPOutCommand = '
bcp
' + '
"MyDb.dbo.' + @TableName +
42.
'"
out
"' + ltrim(rtrim(@BackupFolderFile)) +
43.
'"
-c -q -S
' + @@Servername + '
-T'
44.
45.
print @BCPOutCommand
46.
set
@Counter = @Counter + 1
47.
end
2. 在 Windows DOS 命令行运行生成的bcp命令。假设我们只有一个称为t1的表格,bcp 命令看起来如下:
bcp “test.dbo.t1″ out “c:/junk/t1.txt” -c -q -SSqlServerInstanceName -T
3. 收集这些文本 text 文件并且移动它们到MySQL server;
4. 在mysql中运行这命令以实现导入数据,如果需要可以调整目录名称。
mysql> LOAD DATA LOCAL INFILE ‘/home/haidong/Desktop/t1.txt’ INTO TABLE t1 LINES TERMINATED BY ‘/r/n’;
我已经成功测试了一些包含 number,character, datetime, 和 sequence 数据的表。 运气多变,希望对你有所帮助。
更多内容:
To game to creative life
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>