MySQL--将MySQL数据导入到SQL Server

随着时代的进步,社会的发展,各种技术层出不穷五花八门乱七八糟数不胜数(写作文呢!!!)

不扯废话,简单而言,很多公司都会同时使用多种数据库,因此数据在不同数据库之间导入导出就成为一个让人蛋疼的问题,对于周期行的需求,可以开发专门的程序处理,但是对于偶尔不确定性的需求,就到了需要DBA献身的时候啦,当需要将MySQL数据导入到SQL Server中时,该怎么搞呢?

当然使用工具最简单,但是我就忽略工具!!!

在MySQL中创建测试数据:

create table tb001(c1 int auto_increment primary key,c2 varchar(2000));
insert into tb001(c2) select ‘abc\r\n‘;
insert into tb001(c2) select ‘你好啊\r\n‘;
insert into tb001(c2) select ‘你好啊\n‘;
insert into tb001(c2) select ‘双引号"‘;
insert into tb001(c2) select ‘全角双引号“‘;
insert into tb001(c2) select ‘单引号‘‘‘;
insert into tb001(c2) select ‘全角单引号’‘;

##=====================================================================##
使用mysqldump来导出与MS SQL SERVER兼容的INSERT 语句:

mysqldump --host=‘192.168.166.169‘ --port=3358 --user=‘mysql_admin‘ --password=‘[email protected]@Pwd‘ --skip-add-locks --compatible=mssql --complete-insert --compact --extended-insert=false --default-character-set=utf8 -t --databases ‘test‘ --table ‘tb001‘ >/tmp/t4.sql

上面脚本的一些注释说明:

--compatible=mssql ##导出的SQL与MS SQL Server兼容
--complete-insert ##导出的INSERT语句包含列名
--compact ##采用精简模式,不输出各种MySQL信息
--extended-insert=false ##采用一行数据一条INSERT的方式
--default-character-set=utf8 ##指定导出的字符集
-t ##-t表示只导出数据,-d表示只导出数据结构
--databases ‘test‘ ##数据库名称
--table ‘CityMatchup‘ ##表名

导出结果为:

INSERT INTO "tb001" ("c1", "c2") VALUES (1,‘abc\r\n‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (2,‘你好啊\r\n‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (3,‘你好啊\n‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (4,‘双引号\"‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (5,‘全角双引号“‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (6,‘单引号\‘‘);
INSERT INTO "tb001" ("c1", "c2") VALUES (7,‘全角单引号’‘);

对于列名用双引号的问题,可以使用SET QUOTED_IDENTIFIER ON 来处理,也可以使用SQLCMD加-I参数来处理
但是对文本中的单引号就无解了,MySQL中使用"\"来作为转义符,而SQL Server中使用两个单引号来表示一个单引号。

MySQLdump可以将数据导成INSERT语句,并提供配置兼容其他数据库的参数,但由于不同数据库转义字符不同,因此即使使用compatible=mssql也不能保证导出的脚本能在SQL Server中正常执行。

##===========================================================================##

使用SELECT INTO OUTFILE来导出数据

SELECT * INTO OUTFILE ‘/tmp/tb001.txt‘
FIELDS TERMINATED BY ‘||--||‘
LINES TERMINATED BY ‘||==||‘ FROM test.tb001;

在Linux下看到的是这样:

虽然有点乱,但是忍啦!

然后下载文件,使用notepad++打开,选择“格式”>> "转为ANSI编码格式" ,然后另存为新文件,在SQL Server中使用BULK INSERT来导入:

CREATE TABLE tmp_tb001(id NVARCHAR(2000),c1 NVARCHAR(2000))
GO
BULK INSERT tmp_tb001
FROM ‘D:\tb002.txt‘
WITH(FIELDTERMINATOR=‘||--||‘,
ROWTERMINATOR=‘||==||‘
)
GO
SELECT * FROM tmp_tb001

也可以使用SQL Server的导入导出工具来处理,主要修改分隔符。

注意使用SELECT INTO OUTFILE导出文件时,NULL值被表示为\N,而\N在导入SQL Server时会被当初字符串“\N”来处理,因此建议先建立一个完全由NVARCHAR类型列组成的表来“暂存”导入的时候,然后经过数据清理后再导入正式表中,对于懒与一列一列折腾的人来说,可以拼下SQL来获取表的所有列转换:

SELECT
‘CASE WHEN [‘+T1.name+‘]=‘‘\N‘‘ THEN NULL ELSE [‘+T1.name+‘] END AS [‘+T1.name+‘],‘
FROM sys.all_columns T1
WHERE T1.object_id=OBJECT_ID(‘tmp_tb001‘)

由于我们强行将\N当成NULL来转换,难免会造成误伤,将真实数据就为’\N‘的值变为NULL,因此导完数据后检查是必须的。

最后语句为:

SELECT
CASE WHEN [id]=‘\N‘ THEN NULL ELSE [id] END AS [id],
CASE WHEN [c1]=‘\N‘ THEN NULL ELSE [c1] END AS [c1]
FROM tmp_tb001

执行结果为:

##=======================================================================##

导出INSERT脚本存在转义字符单引号的问题,同时导出数据不包含GO,在需要大量数据导入到SQL SERVER时存在严重的性能问题,可以尝试参考本人的《Powershell--批量拆分SQL语句为事务并批处理》来处理,但也是问题多多。

而导出文件然后导入的方式,需要对文件进行一次转换,文件较大时notepad++可能无法打卡,UE能稍微给力点,但面对好几个G的文本文件也是无力回天,同时NULL值处理也需要慎重对待。

##========================================================================##

好啦,是时候上妹子啦。

时间: 2024-11-07 20:33:45

MySQL--将MySQL数据导入到SQL Server的相关文章

VBS将本地的Excel数据导入到SQL Server中

最近有个测试,需要将本地的Excel数据导入到SQL Server中,所以就写了一个这个脚本,供有需要的同学进行参考.因为在此演示测试,所以准备的数据都比较简单. 我们准备将本地的Excel的A列插入到数据库中的Username列 首先准备本地的Excel数据 然后准备数据库及表结构 开始上脚本 Dim DB,objRecordSet Dim Excel 'SQL Server服务器地址 Dim SQLserver 'SQL Server 数据库 Dim Database 'SQL Server

关于如何将Excel数据导入到SQL Server中

面对大量的Excel数据我们可能会非常苦恼,如果一条一条的插入到数据库:不仅会耗大量的时间,而且还可能会发生错误,现在我来说一下如何导入数据! 1.准备工作 首先要在Excel中建立数据表对应的数据字段,如下图: 数据库对应的字段: 2.数据导入 记得要选择Excel 然后点击“浏览”选择你要导入的目标数据,点击“下一步”,输入服务器的名称,登陆名和密码: 下一步: 下一步: 在这里选择你要导入的数据表,也可以自己新命名一个表: 点击"预览"就可以观看我们的有数据了: 点“下一步”:

将Excel数据导入到SQL Server中

面对大量的Excel数据我们可能会非常苦恼,如果一条一条的插入到数据库:不仅会耗大量的时间,而且还可能会发生错误,现在我来说一下如何导入数据! 1.准备工作 首先要在Excel中建立数据表对应的数据字段,如下图: 数据库对应的字段: 2.数据导入 记得要选择Excel 注意:上一步可能会出现 "外部数据库驱动程序中(1)的意外错误" ,解决办法: 在控制 面板打开Windows更新将KB404181 项卸载,重启电脑 然后点击"浏览"选择你要导入的目标数据,点击&q

把EXCEL数据导入到SQL SERVER数据库中

方法一.. 直接看操作步骤 在数据库上点击右键,然后选择"任务",选择"导入数据",我们就看到弹出淡入数据的对话框 Excel 上面的字段命名最好跟要导入到最终的那个表的字段相同.假设终表为A表.组装好 如下图: 按照操作步骤走下去,最终会生成一个新的表(临时表B表). 我们可以借助工具,MSSQL表数据导出成Insert语句的工具   即:将查询出来的这些数据都生成insert into语句. 最终在A表中执行该insert into语句就可以将excel中的数据

将CSV文件中的数据导入到SQL Server 数据库中

导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提示内容进行操作即可. 原文地址:https://www.cnblogs.com/daochangone/p/9134718.html

使用SqlBulkCopy导入数据至MS SQL Server

原文:使用SqlBulkCopy导入数据至MS SQL Server Insus.NET一直使用表类型来数据入MS SQL Server.参考<存储过程参数为DataTable>http://www.cnblogs.com/insus/archive/2012/09/22/2698515.html .今天学习一个SqlBulkCopy来把数据导入MS SQL Server中去.就是这个<读取XML某一节点>http://www.cnblogs.com/insus/p/3778256

MySQL 之 导入外部SQL Server数据

在上一篇博客<MySQL 之 5.6.22安装教程>中,我们介绍了MySQL的安装.今天我们主要讲解一下怎么在MySQL中导入外部SQL Server数据,简而言之就是我们怎么将SQL Server数据库中的数据迁移到MySQL数据库中. 为了实现我们想要的数据迁移,我们首先需要下载一个小工具SQLyog,然后安装到我们的电脑上,接下来我们就一步一步用这个小工具开始我们的数据迁移: 首先看看我们SQL Server数据库中的表结构和表中的数据 打开SQLyog,设置数据连接: 创建跟SQL S

MySQL的redo log结构和SQL Server的log结构对比

MySQL的redo log结构和SQL Server的log结构对比 innodb 存储引擎 mysql技术内幕 f 1 f 2 f 3 f 4 f 5 f 6 f 7 f sqlserver http://www.cnblogs.com/CareySon/p/3308926.html 事务对数据库中每次修改都会分解成多个多个原子层级的条目被记录到持久存储中,这些条目就是所谓的日志记录(Log Record),我们可以通过fn_dblog来查看这些条目.如图2所示. 图2.Fn_dblog 每

mysql数据库数据能不能导入到sql server中

当然可以了. 一.为 MySQL安装ODBC驱动 下载MySQL ODBC Connector,下载:http://dev.mysql.com/downloads/connector 从控制面板-管理工具,打开你的 数据源(ODBC),选 系统DNS ,点添加.   在 创建新数据源对话框中,选择MySQL ODBC 5.1 Driver ,点完成. 完成后会出现MySQL 链接对话框,添加你的 MySQL 数据库账号信息,并确认"root"账号是否有全部的权限,如果你安装MySQL