You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL导出的大型SQL文件导入SQL Server 2019 Express

大型MySQL导出.sql文件导入SQL Server 2019 Express落地方案

核心逻辑:跳过手动编辑大文件的不可行路径,用流式批量预处理清除MySQL专属语法,配合SQL Server自带命令行工具执行导入,适配你容忍少量数据损失、仅需导入表结构和文本数据的需求。

第一步:流式预处理SQL文件(无需全量加载到内存,适配数百MB级文件)

不要用文本编辑器直接打开大文件,用系统自带PowerShell做逐行流式替换,内存占用稳定在几十MB以内,核心替换规则可直接覆盖90%以上的语法兼容问题:

  • 整行删除所有MySQL独有的会话配置语句:包括SET NAMES、SET FOREIGN_KEY_CHECKS、SET TIME_ZONE、SET SQL_MODE开头的行
  • 移除所有MySQL特有的标识符包裹符反引号(`),避免SQL Server识别报错
  • 批量替换MySQL专属数据类型为SQL Server兼容类型:
    • longtext/mediumtext/text 统一替换为 NVARCHAR(MAX)
    • int(N)(如int(11))这类带显示长度的整型,统一替换为INT
    • enum/set类型统一替换为NVARCHAR(255)
    • AUTO_INCREMENT替换为IDENTITY(1,1)
  • 整段删除建表语句中的非必要属性:包括ENGINE=xxx、DEFAULT CHARSET=xxx、COLLATE=xxx、字段/表注释配置,以及所有索引、外键、唯一约束、主键约束的定义行(你接受关联关系丢失,这类内容是导入报错的核心来源)
  • 脚本最开头新增一行SET ANSI_WARNINGS OFF;,开启自动超长字符串截断,不会因为字段长度不匹配中断导入

直接用以下PowerShell命令即可完成上述处理,替换对应文件路径即可运行:

Get-Content .\你的原始mysql文件.sql -Encoding UTF8 -ReadCount 1000 |
ForEach-Object {
    $_ -replace '^SET (NAMES|FOREIGN_KEY_CHECKS|TIME_ZONE|SQL_MODE).*;$', '' `
       -replace '`', '' `
       -replace 'longtext|mediumtext|text', 'NVARCHAR(MAX)' `
       -replace 'int\(\d+\)', 'INT' `
       -replace 'enum\(.*?\)|set\(.*?\)', 'NVARCHAR(255)' `
       -replace 'AUTO_INCREMENT', 'IDENTITY(1,1)' `
       -replace 'ENGINE=.*?;', ';' `
       -replace 'DEFAULT CHARSET=.*|COLLATE=.*|COMMENT=.*', '' `
       -replace '^.*(KEY|CONSTRAINT|FOREIGN KEY|PRIMARY KEY).*,$', '' `
       -replace ',\r?\n\);', "`r`n);"
} | Set-Content .\预处理后.sql -Encoding UTF8

最后一条替换规则是清除建表语句末尾多余的逗号,避免建表语法报错。

第二步:用命令行工具执行导入(避免SSMS大文件加载崩溃问题)

不要用SSMS图形界面的查询编辑器打开大文件执行,用SQL Server Express自带的sqlcmd命令行工具执行预处理后的脚本,对大文件兼容性更好,且支持自动跳过非致命错误。
执行前先把目标数据库的恢复模式改为简单,数据文件自动增长设置为100MB,避免导入过程中日志溢出中断。
在cmd中执行以下命令即可启动导入:

sqlcmd -S .\SQLEXPRESS -d 你提前建好的目标数据库名 -E -i .\预处理后.sql -b -m 1

参数-m 1会最小化错误输出,遇到特殊字符解析失败、单行插入报错这类非致命问题时会自动跳过继续执行,不会中断整体导入流程,符合你容忍少量数据损失的要求。

备选方案(应对批量INSERT语句过长报错场景)

如果预处理后的脚本仍然因为MySQL多值插入(单条INSERT带上千组VALUES)超过SQL Server单次查询长度限制报错,直接拆分两步导入:

  1. 从预处理后的脚本中单独提取所有CREATE TABLE开头到结尾的建表语句块,先执行完成所有空表创建
  2. 从原始SQL文件中提取所有INSERT语句块,将多值插入拆分为CSV格式,用SQL Server自带的BULK INSERT命令逐表导入,导入时配置ERRORFILE参数将解析失败的坏行单独导出跳过即可,该方式导入速度最快,语法兼容要求最低。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:40:01