快捷搜索:
来自 网络数据库 2019-06-22 17:58 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

将MySQL数据导入到SQL

随着一代的前行,社会的上扬,各个手艺家常便饭各式各样乌烟瘴气成千上万(写作文吗!!!)

不扯废话,简单来讲,好多厂商都会同一时候选拔各个数据库,因而数据在分裂数据库之间导入导出就成为一个让人蛋疼的难题,对于周期行的供给,能够支付专门的程序处理,然则对于突发性不明显的供给,就到了急需DBA投身的时候呀,当必要将MySQL数据导入到SQL Server中时,该怎么搞呢?

自然使用工具最简便易行,不过本身就忽略工具!!!

在MySQL中开创测试数据:

create table tb001(c1 int auto_increment primary key,c2 varchar(2000));
insert into tb001(c2) select 'abcrn';
insert into tb001(c2) select '你好啊rn';
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 SETucsonVE卡宴兼容的INSERT 语句:

mysqldump --host='192.168.166.169' --port=3358 --user='mysql_admin' --password='mysql@Admin@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,'abcrn');
INSERT INTO "tb001" ("c1", "c2") VALUES (2,'你好啊rn');
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_IDENTIFIELAND 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下看到的是这般:

图片 1

就算有一点点乱,但是忍啦!

接下来下载文件,使用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”来拍卖,因而提议先创制贰个全然由NVA本田CR-VCHAXC90类型列组成的表来“暂存”导入的时候,然后经过数据清理后再导入正式表中,对于懒与一列一列折腾的人来讲,能够拼下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

实行结果为:

图片 2

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

导出INSERT脚本存在转义字符单引号的难题,同临时候导出数据不带有GO,在供给多量多少导入到SQL SE福特ExplorerVE奥迪Q5时存在严重的性格难点,能够品尝参考本身的《Powershell--批量拆分SQL语句为工作并批管理》来拍卖,但也是主题素材多多。

而导出文件然后导入的措施,须要对文本进行二次转变,文件相当的大时notepad 只怕不能够打卡,UE能稍微给力点,但面临某个个G的文书文件也是无力回天,同不时候NULL值管理也亟需慎重对待。

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

好啊,是时候上妹子啊。

图片 3

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:将MySQL数据导入到SQL

关键词: