Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MySQL数据库导入MS SQL Server_Mysql_Sql Server_Mysqldump - Fatal编程技术网

将MySQL数据库导入MS SQL Server

将MySQL数据库导入MS SQL Server,mysql,sql-server,mysqldump,Mysql,Sql Server,Mysqldump,我有一个MySQL转储中的.sql文件,其中包含要插入到这些表中的表、定义和数据。如何将转储文件中表示的此数据库转换为MS SQL Server数据库?如果使用进行导出,可以将SQL兼容模式切换为“MSSQL”。这样,您只需针对MS SQL数据库运行导出的脚本,就完成了 如果您不能或不想使用PhpMyAdmin,中还有一个兼容性选项,但就个人而言,我宁愿让PhpMyAdmin为我这样做。我建议您这样使用: mysqldump--compatible=mssql 仍然是一个web应用程序,可能对大

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

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

如果您不能或不想使用PhpMyAdmin,中还有一个兼容性选项,但就个人而言,我宁愿让PhpMyAdmin为我这样做。

我建议您这样使用:

mysqldump--compatible=mssql


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

我在网上找到了一种方法

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

这里是链接

使用

除了MySQL之外,它还支持Oracle、Sybase和MS Access

它看起来相当聪明,甚至能够处理非平凡的传输。它还获得了一些命令行界面(除了GUI),因此理论上它可以集成到一些批处理加载过程中

这是MySQL版本的当前下载链接

当前(2016年6月)稳定版本6.0.1在传输数据时与当前(5.3.6)MySQL ODBC驱动程序崩溃。所有内容都是64位的。
带有5.1.13 ODBC驱动程序的5.3版本运行良好。

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

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

    mysqldump-u[username]-p--compatible=mssql--extended insert=FALSE db\u name table\u name>table\u backup.sql

  • 使用PowerShell将导出的文件拆分为每个文件300000行:

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

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

  • 这里没有什么提示


    。通过使用此选项,您可以在
    where
    sql子句支持的任何条件下拆分表。

    您还可以使用“ODBC”+“sql Server导入和导出向导”。 下面的链接描述了它:


    我今天遇到了一个非常类似的问题——我需要将一个大表(500万行)从MySql复制到MS SQL中

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

  • 在MS SQL中创建了一个表,该表的结构与MySql中的源表匹配

  • 已安装的MS SQL命令行:

  • 将表从MySql转储到文件:

  • 当然,您需要用您的变量替换我的变量,如
    $AZURE\u SERVER
    $TABLE
    ,e.t.c

    希望对您有所帮助。

    运行:

    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
    

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

    mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
    
    --需要extended insert=FALSE以避免mssql 1000行导入限制

    我使用迁移工具创建了表,因此我不确定从backup.sql文件创建表是否有效

    在MSSQL的SSMS中,我必须使用IDENTITY_INSERT按表导入数据,以写入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 
    

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

    您可以使用sqlie应用程序将mysql转换为sqlserver 你可以看这个视频

    您也可以访问原始数据库吗?或者导出文件基本上就是你所有的吗?我也访问了原始数据库。我只是觉得使用转储可能更容易。唉,这给我带来了各种兼容性问题。脚本将在列名周围包含反勾号,MSSQL中不存在的数据类型,将违反max-1000-inserts约束,自动增量关键字等。这个答案是一个合乎逻辑的建议,但我担心它不会工作得太好(至少:我没有)。mysqldump--compatible=ansi“生成与其他数据库系统或较旧的MySQL服务器更兼容的输出。此选项唯一允许的值是ansi,其含义与设置服务器SQL模式的相应选项相同。“-这与您认为的不一样。只有当您可以将ODBC连接器从PC安装到MySQL数据库时,此工具才能工作。如果你只有一个.sql转储文件,你就不能使用SSMA.MySQL引擎是免费软件,也有一个windows版本。安装它并加载转储是一项琐碎的工作。如果您希望找到一个工具(即使是商业工具,更不用说免费工具),可以可靠地将任意MySQL脚本转换为其SQL Server等效脚本,那么,祝您好运。这一点很好。这就是我昨天所做的。除了编写自己的自定义转换实用程序之外,安装MySQL似乎是最好的选择。SSMA使用起来很麻烦,但我最终还是成功了。SSMA是一个很好的选择,这应该是公认的答案。我觉得它一点也不难使用。它需要SQL Server Express中没有的SQL Server代理。也就是说,当Mysql和SQL都在一台机器上或通过网络连接时。如果存在两台不同的机器,并且您有一个来自mysql的转储文件,那么这就没有用了。对吗?这个答案对我很有用,对生成的脚本只做了最小的修改。将其引入SQL Server 2012。以前没有看到兼容模式。我们如何才能导出整个数据库而不是按表导出?请尝试以下回答中解释的“数据库[db_name]关键字:欢迎使用Stackoverflow@gorgino!”!如果你发布了一个链接,请同时发布一个简短的内容摘要,以防将来链接会被关闭。链接应该主要用于扩展你的答案,而不是成为你的答案。
    mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
    
    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