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”,点击下一步,如下图示:

sqlserver-mysql-01.pngsqlserver-mysql-01.png

点击右侧三个点,选择数据链接属性“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

执行结果如下图示:

sqlserver-mysql-09.pngsqlserver-mysql-09.png

(2)mysql中执行第一步拼接的SQL结果
复制第一步的结果,在mysql中执行即可。
注意:去掉结尾最后一个union。

执行结果如下图示:

sqlserver-mysql-10.pngsqlserver-mysql-10.png

(3)mysql中执行alter语句
复制第二步中拼接的alter语句,在mysql中直接执行即可。

查看版本号

-- mysql查看版本号
select version(); 

-- sqlserver查看版本号
select @@version;

(完)

添加新评论