将MySQL数据库导入MS SQL Server

时间:2010-04-12 11:37:21

标签: mysql sql-server mysqldump

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

10 个答案:

答案 0 :(得分:56)

使用SQL Server Migration Assistant (SSMA)

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

它看起来很聪明,能够处理非常重要的转移。它还有一些命令行界面(除了GUI),所以理论上它可以集成到一些批量加载过程中。

这是MySQL版本https://www.microsoft.com/en-us/download/details.aspx?id=54257

的当前下载链接

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

答案 1 :(得分:15)

我建议你这样使用mysqldump

mysqldump --compatible=mssql

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

答案 2 :(得分:13)

我在网上找到了一种方法

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

这是链接

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

答案 3 :(得分:7)

以下是将.sql文件导入MS SQL的方法:

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

    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中运行每个文件

  4. 提示how to speed up the inserts很少。

    Other approach is to use mysqldump –where option。通过使用此选项,您可以在where sql子句支持的任何条件下拆分表。

答案 4 :(得分:5)

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

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

答案 5 :(得分:3)

今天我遇到了一个非常类似的问题 - 我需要将一个大表(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中的表转储到文件中:

  4. mysqldump \
        --compact \
        --complete-insert \
        --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服务器逐个执行了这些部分:

    3. export SQLCMD=/opt/mssql-tools/bin/sqlcmd
      
      x=0
      
      for file in part-*
      do
        echo "Exporting file [$file] into MS SQL. $x thousand(s) processed"
      
        # replaces \' with ''
        sed -i "s/\\\'/''/g" "$file"
      
        # removes all "
        sed -i 's/"//g' "$file"
      
        # allows to insert records with specified 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"
        echo ""
        echo ""
      
        x=$((x+1))
      done
      
      echo "Done"
      

      当然,您需要替换我的变量,例如$AZURE_SERVER$TABLE,e.t.c。和你的一起。

      希望有所帮助。

答案 6 :(得分:1)

对我来说,最好使用以下命令导出所有数据:

mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql

-extended-insert = FALSE是为了避免mssql 1000行导入限制。

我是使用迁移工具创建的表,所以不确定从backup.sql文件创建CREATE是否有效。

在MSSQL的SSMS中,我必须逐一导入IDENTITY_INSERT为ON的表,以写入ID字段:

SET IDENTITY_INSERT dbo.app_warehouse ON;
GO 
INSERT INTO "app_warehouse" ("id", "Name", "Standort", "Laenge", "Breite", "Notiz") VALUES (1,'01','Bremen',250,120,'');
SET IDENTITY_INSERT dbo.app_warehouse OFF;
GO 

如果您有关系,则必须先导入子项,然后再导入具有外键的表。

答案 7 :(得分:0)

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

enter image description here

答案 8 :(得分:0)

运行:

mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

您要查看过程栏吗?

pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

答案 9 :(得分:0)

您可以使用sqlie应用程序将mysql转换为sqlserver 你可以看这部影片 https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s