讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在SQL Server中用BULK INSERT快速导入CSV文件?

夏磊酱_9347

夏磊酱_9347

发布时间:2026-09-02 12:19:15

|

203人浏览过

|

来源于php中文网

原创

BULK INSERT 导入 CSV 易报错,因 SQL Server 不解析 CSV 语义,需手动处理路径权限、FIRSTROW、CODEPAGE、字段分隔符等;含引号或逗号时应预处理或改用导入向导。

如何在sql server中用bulk insert快速导入csv文件?

BULK INSERT 确实能比逐行 INSERT 快几倍甚至几十倍,但直接用它导入 CSV 很容易报错——不是路径找不到,就是类型转换失败,或者第一行标题被当数据插进去。根本原因在于:SQL Server 从不把 CSV 当“标准格式”对待,它只认字符分隔的纯文本,且默认不支持标题行、引号包裹、混合编码等常见 CSV 特性。

为什么 BULK INSERT 导入 CSV 总是报错?

常见错误现象包括:Cannot bulk load because the file could not be opened(路径权限或 UNC 问题)、Invalid column number in the format file(字段数对不上)、Conversion failed when converting date/time(日期格式不一致)。

本质是 BULK INSERT 不解析 CSV 语义:它不会跳过标题行(除非显式指定 FIRSTROW),不会自动识别双引号包裹的字段,也不处理 Excel 保存的 UTF-8 BOM 或混合编码(如中文 Windows 下的 GBK/ANSI)。它只按你给的 FIELDTERMINATOR 和 ROWTERMINATOR 生硬切分。

  • CSV 文件必须是纯文本(推荐用记事本另存为 UTF-8 无 BOM 或 ANSI)
  • 首行如果是列名,必须加 FIRSTROW = 2,否则会当作数据插入
  • 字段含逗号、换行或引号时,BULK INSERT 默认无法处理——它不支持 RFC 4180 标准
  • 路径必须对 SQL Server 服务账户可见:本地路径要放在数据库服务器上,不能是开发机上的 C: emp ile.csv

最简可行的 BULK INSERT CSV 导入写法

假设目标表已存在,名为 sales_data,CSV 文件位于数据库服务器 D 盘根目录,内容不含引号、无空行、第一行为标题:

BULK INSERT sales_data
FROM 'D:datasales.csv'
WITH (
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = '
',
  FIRSTROW = 2,
  CODEPAGE = '65001',  -- 强制 UTF-8
  KEEPNULLS
);

关键点说明:

QuickBooks Mileage CSV
QuickBooks Mileage CSV

使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。

下载
  • FIRSTROW = 2 是防止标题当数据的最低要求
  • CODEPAGE = '65001' 对含中文的 CSV 几乎必加,否则乱码;若文件是 ANSI(Windows-1252),改用 'ACP'
  • KEEPNULLS 防止空字符串被转成默认值(比如 GETDATE())
  • 别用 FORMAT = 'CSV' —— 它仅在 SQL Server 2017+ 且配合 Azure 存储时才有效,本地文件不支持

遇到字段含引号或逗号怎么办?

直接放弃 BULK INSERT。它没有原生引号解析能力。你有三个选择:

  • 预处理 CSV:用 PowerShell 或 Python 去掉引号、转义逗号,再导入(适合一次性任务)
  • 改用 OPENROWSET(BULK...) + 格式文件(复杂但可控,需提前定义每列类型和偏移)
  • 回到图形化工具:SSMS 的导入向导底层会调用 Microsoft.ACE.OLEDB.12.0 驱动,能正确识别 Excel/CSV 的引号逻辑,更省心

例如,用 OPENROWSET 绕过引号问题需先启用 Ad Hoc Distributed Queries,再写:

SELECT * FROM OPENROWSET(
  BULK 'D:datasales.csv',
  FORMATFILE = 'D:dataormat.xml',
  CODEPAGE = '65001'
) AS data;

但 format.xml 必须手工编写,描述每一列的宽度、类型、是否跳过等——这对临时导入来说,成本远高于用向导点几下。

权限和路径最容易被忽略的坑

错误信息 Cannot bulk load because the file could not be opened 90% 不是路径写错,而是权限问题:

  • SQL Server 服务账户(不是你的 Windows 登录账户)必须对 CSV 文件所在目录有读取权限
  • 如果路径是网络共享(UNC),必须用 \servershare ile.csv,且 SQL Server 账户需有该共享的 NTFS 权限
  • Azure SQL 数据库完全不支持本地路径,FROM 'C:...' 会直接报错——只能用 Azure Blob 存储 + SAS token
  • 即使路径正确,若 CSV 正被 Excel 打开,SQL Server 会因文件锁失败,报 Access is denied

真正卡住人的,往往不是语法,而是那个没给 SQL Server 服务账户加上的“读取”权限,或者忘了关掉 Excel。这些细节不验证,写十遍 BULK INSERT 都跑不通。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5851

2023.08.11

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

40

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

20

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

20

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

20

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

20

2026.10.22

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

20

2026.10.22

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

140

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn