MySQL导入SQL Server表结构和数据
简述
本文主要是讲解通过Navicat for MySQL工具来将SQL Server表结构和数据导入到MySQL数据库。
本文环境版本:
MySQL版本:5.7.31
SQL Server版本:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Navicat Premium版本:15.0.12
具体操作步骤如下所示。
操作步骤
选择指定数据库,点击右侧导入向导,选择“ODBC”,点击下一步,如下图示:
点击右侧三个点,选择数据链接属性“Microsoft OLE DB Provider for SQL Server”,点击“下一页”,如下图示:
输入连接服务器IP、连接用户名密码,勾选允许保存密码,在服务器上选择目标数据库,点击测试连接,查看连接测试结果,如下图示:
选择需同步的表,点击下一步,如下图示:
选择是否新建表,目标数据库不存在表时,默认会选中新建表,点击下一步:
源表和目标表字段确认,如下图示:
这步中需注意金额等类型有时候会转换为double类型,自己可修改为decimal(16,2)等mysql对应的类型。
导入结果日志如下图示:
说明
通过以上步骤我们发现表结构和数据是导入过来了,但是表/字段注释、表索引等信息并未导入过来,所以我们可通过如下步骤对导入过程进行完善。
拼接修改表注释SQL
-- 拼接修改表注释SQL
SELECT
'alter table ' + d.name + ' comment ''' + CONVERT ( VARCHAR ( 200 ), isnull( f.value, '' ), 120 ) + ''';'
FROM
sysobjects d
RIGHT JOIN sys.extended_properties f ON d.id= f.major_id
AND f.minor_id= 0
WHERE
d.name IS NOT NULL
拼接修改字段注释SQL
(1)sqlserver中查询所有字段的拼接SQL
-- 拼接修改字段注释SQL
SELECT SQL语句
= 'select CONCAT(''alter table ' + d.name + ' modify column `' + a.name + '` '', column_type , '' comment ''''' + CONVERT ( VARCHAR ( 200 ), isnull( g.[value], '''' ), 120 ) + ''''';'') aa from information_schema.columns where table_name=''' + d.name + ''' and column_name= ''' + a.name + ''' union '
FROM
syscolumns a
LEFT JOIN systypes b ON a.xusertype= b.xusertype
INNER JOIN sysobjects d ON a.id= d.id
AND d.xtype= 'U'
AND d.name= 'bus_setllist_setlinfo'
LEFT JOIN syscomments e ON a.cdefault= e.id
LEFT JOIN sys.extended_properties g ON a.id= G.major_id
AND a.colid= g.minor_id
LEFT JOIN sys.extended_properties f ON d.id= f.major_id
AND f.minor_id= 0
WHERE
g.value IS NOT NULL
AND g.class_desc = 'OBJECT_OR_COLUMN'
ORDER BY
a.id,
a.colorder
执行结果如下图示:
(2)mysql中执行第一步拼接的SQL结果
复制第一步的结果,在mysql中执行即可。
注意:去掉结尾最后一个union。
执行结果如下图示:
(3)mysql中执行alter语句
复制第二步中拼接的alter语句,在mysql中直接执行即可。
查看版本号
-- mysql查看版本号
select version();
-- sqlserver查看版本号
select @@version;
(完)