我有一个包含表、定义和要插入这些表中的数据的 MySQL 转储文件 .sql
。如何将此转储文件所表示的数据库转换为 SQL Server 数据库?
我有一个包含表、定义和要插入这些表中的数据的 MySQL 转储文件 .sql
。如何将此转储文件所表示的数据库转换为 SQL Server 数据库?
使用 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.3版本的5.1.13 ODBC驱动程序工作正常。
我建议你使用 mysqldump 像这样:
mysqldump --compatible=mssql
phpMyAdmin 仍然是一个 Web 应用程序,可能对于 大型数据库 有一些限制 (脚本执行时间、可分配内存等)。
我在网上找到了一种方法
需要一些工作,因为它必须逐个表执行。 但无论如何,我可以将表格,数据和约束复制到SQL Server数据库中。
这是链接
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
.sql
文件到SQL Server的方法:
使用--compatible=mssql
和--extended-insert=FALSE
选项从MySQL导出表:
mysqldump -u [用户名] -p --compatible=mssql --extended-insert=FALSE 数据库名 表名 > table_backup.sql
使用PowerShell将导出的文件每300000行分割成一个文件:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
在SQL Server Management Studio中运行每个文件
--where
选项。通过使用此选项,您可以按任何支持where
SQL子句的条件拆分您的表。可以参考这篇文章了解更多信息。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"
split --lines=1000 "$FILENAME" part-
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"
# 将 \' 替换为 '' sed -i "s/\\\'/''/g" "$file"
# 移除所有 " sed -i 's/"//g' "$file"
# 允许插入具有指定主键(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
等等。对我而言,最好的方法是使用以下命令导出所有数据:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--需要使用extended-insert=FALSE以避免mssql 1000行导入限制。
我使用我的迁移工具创建了表,所以我不确定从backup.sql文件中的CREATE是否有效。
在SQL Server的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
如果您有关系,您必须先导入子项,然后再导入带外键的表格。
另外,您还可以使用“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
您可以使用sqlie应用程序将MySQL转换为SQL Server,您可以观看这个视频https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s