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

如何将含INSERT语句的18GB超大SQL文件导入SQL Server数据库?

大体积SQL脚本导入优化方案

针对18GB的SQL脚本导入问题,以下是几个高效可行的方案:

一、直接用sqlcmd命令行完整导入(无需分割)

sqlcmd是SQL Server原生命令行工具,比SSMS更稳定,支持大文件导入,无需手动分割脚本:

  • Windows认证命令示例:
    sqlcmd -S 你的服务器名 -E -d 目标数据库 -i "D:\你的18GB脚本.sql" -b -o "D:\导入日志.txt" -h -1 -W
    
  • SQL Server认证命令示例:
    sqlcmd -S 你的服务器名 -U 用户名 -P 密码 -d 目标数据库 -i "D:\你的18GB脚本.sql" -b -o "D:\导入日志.txt" -h -1 -W
    

参数说明:

  • -b:执行出错时立即终止,方便定位问题
  • -o:生成执行日志,记录报错细节
  • -h -1:取消结果集表头输出,提升执行效率
  • -W:取消列宽自动调整,减少不必要的格式处理

二、导入前的关键优化(大幅提升速度)

  1. 切换数据库恢复模式为简单模式
    减少事务日志生成量,避免日志文件暴涨:

    ALTER DATABASE 目标数据库 SET RECOVERY SIMPLE;
    

    导入完成后,可按需切换回完整模式:

    ALTER DATABASE 目标数据库 SET RECOVERY FULL;
    
  2. 禁用所有约束和索引
    按需求禁用外键、检查约束,同时禁用非聚集索引,避免插入数据时的额外开销:

    -- 禁用所有表的约束
    EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL";
    -- 禁用所有表的非聚集索引
    EXEC sp_msforeachtable "ALTER INDEX ALL ON ? DISABLE";
    

    导入完成后,可根据需要重新启用:

    -- 启用所有约束
    EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL";
    -- 重建所有索引
    EXEC sp_msforeachtable "ALTER INDEX ALL ON ? REBUILD";
    
  3. 调整事务提交方式
    在脚本开头添加以下语句,减少频繁提交事务的开销:

    SET IMPLICIT_TRANSACTIONS ON;
    SET NOCOUNT ON;
    

    脚本结尾添加:

    COMMIT;
    

三、PowerShell分批执行(应对内存限制)

如果sqlcmd执行中出现内存不足问题,可通过PowerShell按GO语句自动分割批次执行,无需手动修改脚本:

$scriptPath = "D:\你的18GB脚本.sql"
$serverName = "你的服务器名"
$dbName = "目标数据库"

$batch = ""
Get-Content $scriptPath -ReadCount 1000 | ForEach-Object {
    foreach ($line in $_) {
        if ($line.Trim() -eq "GO") {
            Invoke-SqlCmd -ServerInstance $serverName -Database $dbName -Query $batch
            $batch = ""
        } else {
            $batch += $line + "`n"
        }
    }
}
# 执行最后一批未完成的语句
if ($batch -ne "") {
    Invoke-SqlCmd -ServerInstance $serverName -Database $dbName -Query $batch
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:55:31