我有一个MySQL转储中的.sql文件,其中包含表,定义和要插入这些表中的数据。如何将转储文件中表示的该数据库转换为MS SQL Server数据库?
我有一个MySQL转储中的.sql文件,其中包含表,定义和要插入这些表中的数据。如何将转储文件中表示的该数据库转换为MS SQL Server数据库?
Answers:
除MySQL外,它还支持Oracle,Sybase和MS Access。
它看起来很聪明,甚至可以处理非平凡的传输。它还具有一些命令行界面(除了GUI),因此从理论上讲它可以集成到某些批处理加载过程中。
这是MySQL版本https://www.microsoft.com/zh-cn/download/details.aspx?id=54257的当前下载链接
当前(2016年6月)稳定版本6.0.1在传输数据时与当前(5.3.6)MySQL ODBC驱动程序崩溃。一切都是64位。带有5.1.13 ODBC驱动程序的5.3版本可以正常工作。
我建议您像这样使用mysqldump:
mysqldump --compatible=mssql
phpMyAdmin仍然是一个Web应用程序,可能对大型数据库有一些限制(脚本执行时间,可分配内存等)。
我在网上找到了解决方法
它需要一点点工作,因为它必须逐表完成。但是无论如何,我可以将表,数据和约束复制到MS SQL数据库中。
链接在这里
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
如果使用PhpMyAdmin进行导出,则可以将sql兼容模式切换为'MSSQL'。这样,您只需对MS SQL数据库运行导出的脚本即可。
如果您不能或不想使用PhpMyAdmin,则mysqldump中还有一个兼容性选项,但就我个人而言,我希望PhpMyAdmin为我做。
这是将.sql文件导入MS SQL的方法:
使用--compatible=mssql
和--extended-insert=FALSE
选项从MySQL导出表:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
使用PowerShell将导出的文件拆分为每个文件300000行:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
在MS SQL Server Management Studio中运行每个文件
有一些技巧提示如何加快插入速度。
其他方法是使用mysqldump –where
选项。通过使用此选项,可以在where
sql子句支持的任何条件下拆分表。
--databases [db_name]
在此答案中解释的关键字:stackoverflow.com/a/26096339/155687
我今天遇到了一个非常类似的问题-我需要将一个大表(500万行)从MySql复制到MS SQL。
这是我已完成的步骤(在Ubuntu Linux下):
在MS SQL中创建了一个表,该表的结构与MySql中的源表相匹配。
安装的MS SQL命令行: https //docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools#ubuntu
将表从MySql转储到文件中:
mysqldump \ -紧凑 --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert =错误\ --host“ $ MYSQL_HOST” \ --user“ $ MYSQL_USER” \ -p“ $ MYSQL_PASS” \ “ $ MYSQL_DB” \ “ $ TABLE”>“ $ FILENAME”
在我的情况下,转储文件非常大,因此我决定将其分成许多小块(每块1000行)- split --lines=1000 "$FILENAME" part-
最后,我遍历了这些小文件,进行了一些文本替换,并针对MS SQL Server逐个执行了这些片段:
导出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
用你的,等等。
希望能有所帮助。
对我来说,最好使用以下命令导出所有数据:
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
如果您有关系,则必须先导入子项,然后再导入具有外键的表。
您也可以使用“ ODBC” +“ SQL Server导入和导出向导”。下面的链接对此进行了描述:https : //www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
跑:
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