我有一个来自MySQL转储的.sql文件,其中包含要在这些表中插入的表,定义和数据。如何将转储文件中表示的此数据库转换为MS SQL Server数据库?
答案 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)
答案 2 :(得分:13)
我在网上找到了一种方法
它需要一点点工作,因为它必须逐桌完成。但无论如何,我可以将表,数据和约束复制到MS SQL数据库中。
这是链接
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
答案 3 :(得分:7)
以下是将.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中运行每个文件
提示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下):
在MS SQL中创建了一个表,该表与MySql中的源表匹配。
已安装的MS SQL命令行:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
将MySql中的表转储到文件中:
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"
在我的情况下,转储文件非常大,所以我决定将它拆分成许多小块(每行1000行) - split --lines=1000 "$FILENAME" part-
最后,我迭代了这些小文件,做了一些文本替换,并针对MS SQL服务器逐个执行了这些部分:
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/
答案 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