将MySQL数据库导入MS SQL Server

mar*_*den 83 mysql sql-server mysqldump

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

Zar*_*dan 59

使用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版本可以正常工作.

  • MySQL引擎是免费软件,也有Windows版本.安装它并加载转储是一项微不足道的工作.如果您希望找到一个可以将任意MySQL脚本可靠地转换为其SQL Server等效工具(甚至是商业版,更不用说免费版)了 - 好吧,祝你好运. (10认同)
  • 只有在可以从PC安装ODBC连接器到MySQL数据库时,此工具才有效.如果您只有.sql转储文件,则无法使用SSMA. (8认同)
  • SSMA是一个很好的选择,这应该是公认的答案.我一点都不觉得难以使用. (2认同)
  • 它需要SQL Server Express附带的SQL Server代理. (2认同)

小智 16

我建议你像这样使用mysqldump:

mysqldump --compatible=mssql

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

  • 唉,这给了我各种各样的相容问题.该脚本将包含有关列名称的反引号,MSSQL中不存在的数据类型,将违反max-1000-inserts约束,auto_increment关键字等.这个答案是一个逻辑建议,但我担心它不会工作得太好(至少:它不适合我). (5认同)
  • @deklin,它不适用于MS SQL 2008. (4认同)

mar*_*den 13

我在网上找到了一种方法

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

链接在这里

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


Vla*_*lav 7

这是我将.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选项.通过使用此选项,您可以在wheresql子句支持的任何条件下拆分表.


Wha*_*kee 5

如果使用PhpMyAdmin进行导出,则可以将sql兼容模式切换为"MSSQL".这样,您只需针对MS SQL数据库运行导出的脚本即可.

如果你不能或不想使用PhpMyAdmin,mysqldump中也有兼容性选项,但我个人更愿意让PhpMyAdmin为我做.

  • @marga,它不适用于MS SQL 2008. (4认同)

Vla*_*kov 5

我今天遇到了一个非常相似的问题 - 我需要将一个大表(5 百万行)从 MySql 复制到 MS SQL 中。

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

  1. 在 MS SQL 中创建了一个表,其结构与 MySql 中的源表相匹配。

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

  3. 将表从 MySql 转储到文件:

mysqldump \
    - 袖珍的 \
    --完整插入\
    --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. 最后,我遍历了这些小文件,进行了一些文本替换,并针对 MS SQL 服务器逐个执行了这些片段:

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

x=0

对于文件中的部分-*
做
  echo "正在将文件 [$file] 导出到 MS SQL。已处理 $x 千"

  # 用 '' 替换 \'
  sed -i "s/\\\'/''/g" "$file"

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

  # 允许插入指定 PK(id) 的记录
  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))
完毕

回声“完成”

当然,你需要更换喜欢我的变量$AZURE_SERVER$TABLE用你的,等等。

希望有帮助。