将MySQL数据库导入MS SQL Server

我有一个包含表格,定义和数据的MySQL转储的.sql文件被插入到这些表中。 如何将转储文件中表示的数据库转换为MS SQL Server数据库?

使用SQL Server迁移助理(SSMA)

除了MySQL,它还支持Oracle,Sybase和MS Access。

它似乎相当聪明,甚至能够处理非平凡的转移。 它还有一些命令行界面(除了GUI),理论上它可以被集成到一些批量加载过程中。

这是MySQL版本的当前下载链接http://www.microsoft.com/en-us/download/details.aspx?id=42657

当前(2016年6月)稳定版本6.0.1在传输数据时与当前(5.3.6)MySQL ODBC驱动程序崩溃。 一切都是64位的。 具有5.1.13 ODBC驱动程序的5.3版本正常工作。

我build议你使用mysqldump像这样:

mysqldump --compatible=mssql

phpMyAdmin仍然是一个Web应用程序,可能会有一些大型数据库 (脚本执行时间,可分配内存等)的限制。

我在网上find了一个方法

它需要一点点的工作,因为它必须一桌一桌地完成。 但无论如何,我可以将表,数据和约束条件复制到MS SQL数据库中。

链接在这里

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx

这里是我的方法来导入.sql文件到MS SQL:

  1. 从MySQL导出表格--compatible=mssql--extended-insert=FALSE选项:

    mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql

  2. 使用PowerShell将导出的文件分割为每个文件300000行:

    $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}

  3. 在MS SQL Server Management Studio中运行每个文件

有几个提示如何加快插入 。

其他方法是使用mysqldump –where选项 。 通过使用这个选项,你可以在任何由sql语句支持的条件下拆分你的表。

如果使用PhpMyAdmin进行导出,则可以将SQL兼容模式切换为“MSSQL”。 这样,你只需运行导出的脚本对MS SQL数据库,你就完成了。

如果你不能或不想使用PhpMyAdmin,在mysqldump中也有一个兼容性选项,但是我个人宁愿让PhpMyAdmin为我做。

这家伙有一个简单的把戏,使用MS Access作为MySQL和MSSQL之间的tunel

你可以阅读这篇文章http://azamudd.in/convert-data-from-mysql-into-mssql-the-easy-way-via-ms-access/

也可以使用“ODBC”+“SQL Server导入和导出向导”。 下面的链接描述它: https : //www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/

在这里输入图像说明

我今天有一个非常类似的问题 – 我需要从MySql复制一个大表(500万行)到MS SQL。

以下是我已经完成的步骤(在Ubuntu Linux下):

  1. 在MS SQL中创build了一个与MySql中的源表相匹配的表。

  2. 安装MS SQL命令行: https : //docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. 将MySql中的表转储到文件中:

 mysqldump \
     --compact \
     - 完全插入\
     --no-create-info \
     --compatible = mssql \
     --extended-insert = FALSE \
     --host“$ MYSQL_HOST”\
     --user“$ MYSQL_USER”\
     -p“$ MYSQL_PASS”\
     “$ MYSQL_DB”\
     “$ TABLE”>“$ FILENAME”
  1. 在我的情况下,转储文件是相当大的,所以我决定把它分成许多小块(每个1000行) – split --lines=1000 "$FILENAME" part-

  2. 最后,我遍历这些小文件,做了一些文本replace,并逐一对MS SQL服务器执行这些部分:

导出SQLCMD = / opt / mssql-tools / bin / sqlcmd

 x = 0的

部分文件 -  *
做
   echo“将文件[$ file]导出到MS SQL中$ x(s)processed”

  用''代替\'
   sed -i“s / \\\'/''/ g”“$ file”

   #删除所有“
   sed -i's /“// g'”$ file“

   #允许插入指定PK(id)的logging
   sed -i“1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /”“$ file”

   “$ SQLCMD”-S“$ AZURE_SERVER”-d“$ AZURE_DB”-U“$ AZURE_USER”-P“$ AZURE_PASS”-i“$ file”
  回声“”
  回声“”

   X = $((X + 1))
 DONE

回声“完成”

当然你需要用你的$AZURE_SERVER$TABLE等replace我的variables。

希望有所帮助。