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

CSV批量插入SQL Server仅导入半数数据问题排查及全量导入方案

解决BULK INSERT仅导入半数700万条CSV记录的问题

我来帮你定位问题并给出解决方案,你这个情况90%是分隔符配置错误导致的,咱们一步步拆解:

核心错误:字段分隔符与行分隔符重复

你当前的BULK INSERT语句里,FIELDTERMINATOR = '0x0a'(也就是换行符),同时ROWTERMINATOR = '\n'(同样是换行符)——这会让SQL Server彻底搞不清哪部分是字段、哪部分是行。

如果你的CSV是单字段文件(每条记录就是一行内容),那根本不需要指定FIELDTERMINATOR;如果是多字段CSV,你应该用逗号(,)、制表符(\t)这类实际的字段分隔符,而不是换行符。这种错误配置会导致大量记录被误判为无效行,最终只导入了一部分。

修正后的BULK INSERT语句

情况1:CSV是单字段(每条记录占一行)

直接移除错误的FIELDTERMINATOR配置即可:

BULK INSERT *Table_Name* FROM 'file path' WITH ( 
    FIRSTROW = 1, -- CSV无表头,这个配置是对的
    ROWTERMINATOR = '\n', 
    ERRORFILE = '*error file path*', 
    TABLOCK,
    MAXERRORS = 0 -- 强制显示所有错误,方便排查
)

情况2:CSV是多字段(比如用逗号分隔)

把FIELDTERMINATOR替换成你实际的字段分隔符(这里以逗号为例):

BULK INSERT *Table_Name* FROM 'file path' WITH ( 
    FIRSTROW = 1,
    FIELDTERMINATOR = ',', -- 替换为你CSV实际的字段分隔符
    ROWTERMINATOR = '\n', 
    ERRORFILE = '*error file path*', 
    TABLOCK,
    MAXERRORS = 0
)

额外排查与优化步骤

  1. 查看错误文件:优先打开你指定的ERRORFILE路径,里面会详细记录导入失败的行和具体原因(比如字段过长、格式错误),这是最快定位问题的方式。
  2. 统一行结尾格式:如果CSV文件混合了Windows(\r\n)和Unix(\n)换行符,统一改成\r\n,并把ROWTERMINATOR设为'\r\n'。
  3. 检查字段长度:你的表字段varchar(50)如果不足以容纳CSV中的内容,会导致记录被截断或报错跳过,建议根据实际数据调整长度(比如改成varchar(255)或更大)。
  4. 权限验证:确保SQL Server服务账号有CSV文件所在路径的读取权限,权限不足也可能导致部分记录无法读取。
  5. 编码适配:如果CSV是UTF-8编码,在SQL Server 2016及以上版本可以添加CODEPAGE = '65001'参数,避免乱码或导入失败。

内容的提问来源于stack exchange,提问作者Bain-27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:37:50