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

如何在SQL Server中使用T-SQL批量导入CSV数据

雨晨酱_4900

雨晨酱_4900

发布时间:2026-10-29 13:15:48

|

989人浏览过

|

来源于php中文网

原创

BULK INSERT 本身不支持通配符或自动遍历多个文件,因其 FROM 参数仅接受单个静态文件路径字符串,无法直接解析变量,且不具备目录枚举能力,必须依赖 xp_DirTree 或 xp_cmdshell 等系统存储过程动态获取文件列表并配合动态 SQL 执行。

如何在sql server中使用t-sql批量导入csv数据

BULK INSERT 是 SQL Server 中批量导入 CSV 数据最直接、可控的 T-SQL 方式,但它本身不支持通配符或自动遍历多个文件。想用纯 T-SQL 批量导入一个文件夹下的多个 CSV,必须配合系统存储过程(如 xp_DirTree 或 xp_cmdshell)动态构造语句。


为什么不能直接用 BULK INSERT 导入多个 CSV 文件

BULK INSERT 的 FROM 参数只接受**单个静态文件路径字符串**,不支持变量拼接后直接解析为路径(除非用动态 SQL)。更关键的是:它无法枚举目录内容——这一步得靠外部机制介入。

  • 你写 BULK INSERT t FROM @path 会报错:Incorrect syntax near '@path'
  • 即使改用 EXEC('BULK INSERT t FROM ''' + @path + ''' WITH (...)'),也仍需先拿到文件名列表
  • xp_DirTree 只返回文件名,不带扩展名过滤;xp_cmdshell 'dir /b *.csv' 更灵活但需启用高危功能

用 xp_DirTree 获取 CSV 文件列表并循环导入

这是最轻量、无需启用 xp_cmdshell 的方案,适合受控环境。

Knowledge Graph - Csv Graph Loader Generator
Knowledge Graph - Csv Graph Loader Generator

从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。

下载
  • 确保目标表已存在,且列顺序、类型与 CSV 内容严格匹配(尤其注意日期/数字列是否含空值或格式异常)
  • xp_DirTree 默认不返回扩展名,需用 RIGHT(FileName, 4) 判断是否为 .csv(注意大小写,Windows 下通常不敏感,但稳妥起见建议统一转大写)
  • 每个 BULK INSERT 必须显式指定 FIRSTROW(跳过标题行)、FIELDTERMINATOR(通常是 ',')、ROWTERMINATOR(推荐 '0x0a' 或 ' ',避免 Windows 的 导致末尾多空行)
  • 文件路径拼接时,务必用双反斜杠 \ 或正斜杠 /,单反斜杠在字符串中会被转义
BULK INSERT Account 
FROM 'C:MyImport.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a', FIRSTROW = 2);

用 xp_cmdshell + dir 更可靠地筛选和排序文件

当文件名含空格、特殊字符,或需按修改时间排序导入时,xp_cmdshell 更鲁棒,但需 DBA 显式开启:

  • 执行 sp_configure 'show advanced options', 1; RECONFIGURE; 后再开 xp_cmdshell
  • dir /b /o:d "C:MyImport*.csv" 可按时间升序列出,避免因文件名乱序导致逻辑错误
  • 输出结果含换行符和可能的空行,插入临时表后要 TRIM 并 DELETE WHERE LEN(...) = 0
  • 路径中若含空格(如 C:My Import),dir 命令需用英文双引号包裹整个路径

容易被忽略的关键点

所有基于 BULK INSERT 的批量导入都绕不开三件事:权限、编码、数据洁度。

  • SQL Server 服务账户必须对 CSV 所在目录有**读取权限**——不是当前登录用户,而是运行 SQLSERVER 服务的那个 Windows 账户
  • CSV 若为 UTF-8 with BOM,BULK INSERT 会把 BOM 当作首列内容;建议保存为 ANSI 或 UTF-8 no BOM(Excel 默认不支持后者,可用 Notepad++ 转)
  • 空值处理:CSV 中的空字段默认被当作 NULL,但目标列若定义为 NOT NULL 且无默认值,整行导入失败——要么改表结构,要么在 WITH 子句中加 KEEPNULLS 并预置默认值
  • 事务控制:每个 BULK INSERT 是独立事务;如需全部成功或全部回滚,得套上 BEGIN TRY...CATCH 和显式 TRANSACTION

热门AI工具

更多
WorkBuddy

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

火山引擎

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

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

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

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

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

6031

2023.08.11

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2885

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

4041

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

3231

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

1027

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2807

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2827

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

2933

2023.10.16

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

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

精品课程

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

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