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

Azure SQL执行BULK INSERT报错但本地SQL Server运行正常

问题描述

将CSV文件从Blob存储直接加载到Azure SQL实例时出现报错:已正确配置凭证并可正常访问文件,但执行BULK INSERT时在第3128行失败;相同文件和配置在本地SQL Server中可完全正常执行。

执行的BULK INSERT语句:

BULK INSERT dbo.this_is_a_table FROM
    'transformed/this_is_a_csv.csv'
WITH (
    DATA_SOURCE = 'this_is_a_blob_storage_data_source'
    ,FORMAT = 'CSV' 
    ,FIELDTERMINATOR = '|' 
    ,FIELDQUOTE = '"'
    ,ROWTERMINATOR = '0x0a' 
    ,BATCHSIZE=100000 
    ,TABLOCK
    ,FIRSTROW = 2
    ,CODEPAGE = '65001'
)

已尝试的操作:

  • 将FORMAT改为DATAFILETYPE = 'char'
  • 更换ROWTERMINATOR
    以上操作均未解决问题。

报错信息:

Failed to execute query. Error: Bulk load failed due to invalid column
value in CSV data file transformed/this_is_a_csv.csv in row 3128,
column 10. The OLE DB provider "BULK" for linked server "(null)"
reported an error. The provider did not give any information about the
error.
Cannot fetch a row from OLE DB provider "BULK" for linked
server "(null)".

补充信息:

  • 设置MAXROW=3127时可正常加载数据
  • 检查CSV第3128行未发现明显异常,格式与其他行基本一致

示例数据:

"MANDT"|"EBELN"|"BUKRS"|"BSTYP"|"BSART"|"BSAKZ"|"LOEKZ"|"STATU"|"AEDAT"|"ERNAM"|"LIFNR"|"EKORG"|"WAERS"|"BEDAT"|"FRGGR"|"FRGSX"|"FRGKE"|"FRGZU"|"FRGRL"|"ABSGR"|"PROCSTAT"
"100"|"4620739302"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000001"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"5729302783"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000002"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"5720562944"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000003"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"8401817494"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000004"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
排查与解决方法
  • 检查第3128行的隐藏字符:用Notepad++等编辑器打开文件,启用「显示所有字符」功能(视图->显示符号->显示所有字符),查看该行是否包含不可见字符(如0x0d回车符、零宽度空格、非UTF-8特殊字符)。Azure SQL对字符编码的校验比本地SQL Server更严格,本地可忽略的隐藏字符可能在云端触发报错。
  • 验证目标表列定义:确认第10列(ERNAM)的数据类型长度是否足够。本地SQL Server可能允许隐式截断,但Azure SQL会因长度不足直接报错。比如ERNAM定义为VARCHAR(40),但该行实际值超过40字符就会触发错误。
  • 逐行加载测试:修改BATCHSIZE=1单独加载第3128行,或把该行提取成小CSV文件单独测试,排除上下文干扰,明确报错原因。
  • 调整FIELDQUOTE写法:将FIELDQUOTE = '"'改为FIELDQUOTE = '"',部分场景下转义写法在Azure SQL中可能解析异常。
  • 添加ERRORFILE参数:在WITH子句中加入ERRORFILE = 'transformed/error_log.txt',让Azure SQL输出详细错误行内容,便于定位具体值的问题,注意确保Blob存储对应路径有写入权限。
  • 统一换行符格式:即使设置了ROWTERMINATOR = '0x0a',如果第3128行是Windows格式换行符0x0d0a,其他行是Unix格式0x0a,Azure SQL可能无法正确识别行边界导致列解析错位。可将文件统一转换为Unix格式后再测试。
  • 用OPENROWSET替代BULK INSERT:尝试使用OPENROWSET加载数据,可能获得更详细的报错信息,示例语句:
SELECT * INTO dbo.test_table
FROM OPENROWSET(
    BULK 'transformed/this_is_a_csv.csv',
    DATA_SOURCE = 'this_is_a_blob_storage_data_source',
    FORMAT = 'CSV',
    FIELDTERMINATOR = '|',
    FIELDQUOTE = '"',
    ROWTERMINATOR = '0x0a',
    FIRSTROW = 2,
    CODEPAGE = '65001'
) AS data;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:03:10