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

Azure中使用BULK INSERT将Blob文件转换为SQL数据库表的问题

使用Azure BULK INSERT将Blob中的CSV导入SQL数据库表

我来帮你梳理下完整的操作流程,结合你已经完成的存储凭据创建步骤继续推进:

步骤1:确认存储凭据的有效性

你已经创建了存储凭据,这里再核对下关键点:

  • 如果用的是SAS密钥,确保密钥的权限包含读取Blob的权限,且有效期未过期
  • 凭据关联的存储账户和Blob容器要和你实际使用的一致,创建凭据的语句大概是这样(供参考):
CREATE DATABASE SCOPED CREDENTIAL [BlobCredential] 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 
SECRET = '你的SAS密钥(注意不要开头的?)';

步骤2:创建匹配CSV结构的目标SQL表

你的CSV包含16个字段,得先建一个字段数量、类型匹配的目标表,比如根据你的数据示例,我帮你写了一个参考表结构,你可以根据实际业务调整字段类型:

CREATE TABLE TargetImportTable (
    RecordID INT,
    UniqueID VARCHAR(50),
    RegionCode VARCHAR(10),
    StatusCode1 VARCHAR(10),
    StatusFlag CHAR(1),
    CodeValue VARCHAR(20),
    ShortCode VARCHAR(10),
    CategoryCode VARCHAR(10),
    SequenceNo VARCHAR(20),
    SubCategoryCode VARCHAR(10),
    TypeCode VARCHAR(10),
    TransactionDate DATE,
    ReferenceNo VARCHAR(20),
    Timestamp DATETIME2,
    ReservedField1 VARCHAR(50),
    ReservedField2 VARCHAR(50)
);

注意:字段数量一定要和CSV的列数一致(你的CSV是16列),否则BULK INSERT会报错。

步骤3:编写并执行BULK INSERT语句

结合你的公共容器设置和已有的存储凭据,执行下面的语句就能导入数据了,记得替换掉占位符为你的实际信息:

BULK INSERT TargetImportTable
FROM 'https://你的存储账户名.blob.core.windows.net/你的容器名/你的CSV文件名.csv'
WITH (
    CREDENTIAL = 'BlobCredential', -- 如果你用了存储凭据就加上,公共容器也可以省略这行
    FIELDTERMINATOR = ',', -- CSV的字段分隔符是逗号
    STRINGDELIMITER = '"', -- 你的CSV里字符串用双引号包裹,必须指定这个参数
    FIRSTROW = 1, -- 如果CSV没有表头,从第一行开始导入
    ROWTERMINATOR = '\n', -- 行分隔符,要是Windows格式换行就改成'\r\n'
    TABLOCK, -- 提升导入性能
    CODEPAGE = '65001' -- 支持UTF-8编码,避免乱码
);

常见问题排查

  • 权限错误:先直接在浏览器打开Blob的URL,看能不能下载文件,确认容器确实是公共访问;如果用SAS密钥,检查密钥是否过期、权限是否包含读取
  • 字段不匹配错误:核对目标表的列数和CSV列数是否一致,日期、数字类型的字段要确保CSV里的格式能被SQL识别(比如你的20110902会自动转换成DATE类型)
  • 换行符解析错误:如果导入行数不对,试试用十六进制指定行分隔符,比如ROWTERMINATOR = '0x0a'(对应\n)或者0x0d0a(对应\r\n)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:57