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

使用格式文件向Azure SQL批量导入CSV时遇文件无法打开错误

问题描述
  • 尝试用Blob存储账户中的格式文件,将CSV批量导入Azure SQL数据库,执行语句:
BULK INSERT dbo.MyTable
FROM 'MyCSV.csv'
WITH(DATA_SOURCE = 'MyBlobStorageAccount'
, FIRSTROW = 2
, CODEPAGE = '65001'
 , FORMATFILE = 'MyFormatFile.xml'
);
  • 报错信息:

Cannot bulk load because the file "MyFormatFile.xml" could not be opened. Operating system error code (null).

  • 已验证的情况:
    • 可成功导入同一存储账户内无需格式文件的其他文件
    • 可通过以下语句将MyFormatFile.xml内容导入临时表,排除权限/凭据问题:
IF(OBJECT_ID('tempdb..#data') IS NOT NULL)
    DROP TABLE #data

CREATE TABLE #data
(
    data VARCHAR (MAX)
)

BULK INSERT #data
FROM 'MyFormatFile.xml'
WITH (DATA_SOURCE = 'MyBlobStorageAccount',
      FIRSTROW = 1)
问题原因与解决方案

问题出在FORMATFILE参数的写法上:当通过DATA_SOURCE指定Blob存储时,该参数不会默认使用这个数据源,而是会尝试在本地文件系统查找格式文件,导致找不到文件报错。

有两种修正方式:

方式1:使用Blob存储的完整URL指定格式文件

BULK INSERT dbo.MyTable
FROM 'MyCSV.csv'
WITH(
    DATA_SOURCE = 'MyBlobStorageAccount',
    FIRSTROW = 2,
    CODEPAGE = '65001',
    FORMATFILE = 'https://<你的存储账户名>.blob.core.windows.net/<容器名>/MyFormatFile.xml'
);

方式2:用「数据源名::文件名」的格式关联外部数据源

BULK INSERT dbo.MyTable
FROM 'MyCSV.csv'
WITH(
    DATA_SOURCE = 'MyBlobStorageAccount',
    FIRSTROW = 2,
    CODEPAGE = '65001',
    FORMATFILE = 'MyBlobStorageAccount::MyFormatFile.xml'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:55:59