如何将文件夹中所有CSV文件批量导入SQL Server
批量导入文件夹内所有CSV文件到SQL Server(SSMS环境)
方法一:T-SQL结合xp_cmdshell遍历文件
直接在SSMS查询窗口执行,无需额外工具,适合熟悉T-SQL的用户。
步骤1:启用xp_cmdshell
默认xp_cmdshell处于禁用状态,需先开启(需管理员权限):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE;
操作完成后建议禁用该功能以保障安全性,步骤见后续。
步骤2:创建临时表存储文件列表
用于存放目标文件夹内的所有CSV文件名:
CREATE TABLE #FileList (FileName NVARCHAR(255));
步骤3:遍历文件夹获取CSV文件
替换'C:\YourCSVFolder\'为你的实际CSV文件夹路径,执行后将所有CSV文件名存入临时表:
INSERT INTO #FileList EXEC xp_cmdshell 'dir "C:\YourCSVFolder\*.csv" /b';
/b参数仅返回纯文件名,过滤多余文件信息。
步骤4:循环导入每个CSV文件
假设目标表为dbo.TargetTable,且CSV结构与表结构完全匹配,执行以下动态SQL完成批量导入:
DECLARE @FileName NVARCHAR(255); DECLARE @SQL NVARCHAR(MAX); DECLARE FileCursor CURSOR FOR SELECT FileName FROM #FileList WHERE FileName IS NOT NULL; -- 过滤空行 OPEN FileCursor; FETCH NEXT FROM FileCursor INTO @FileName; WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL = N'BULK INSERT dbo.TargetTable FROM ''C:\YourCSVFolder\' + @FileName + ''' WITH ( FIELDTERMINATOR = '','', -- CSV列分隔符,按需调整 ROWTERMINATOR = ''\n'', -- 行分隔符,按需调整 FIRSTROW = 2, -- 有表头则从第2行开始,无表头改为1 QUOTECHAR = '"", -- 若字段含逗号,添加此参数指定文本限定符 TABLOCK )'; EXEC sp_executesql @SQL; FETCH NEXT FROM FileCursor INTO @FileName; END CLOSE FileCursor; DEALLOCATE FileCursor; DROP TABLE #FileList;
步骤5:(可选)禁用xp_cmdshell
操作完成后恢复禁用状态:
sp_configure 'xp_cmdshell', 0; RECONFIGURE; sp_configure 'show advanced options', 0; RECONFIGURE;
方法二:SSMS导入向导+SSIS包批量处理
适合偏好图形化操作的用户:
- 打开SSMS,连接目标服务器,右键目标数据库 → 任务 → 导入数据
- 数据源选择「平面文件源」,任选一个CSV文件配置(勾选「第一行有列名」按需),完成数据源设置
- 配置目标为SQL Server,选择目标表并完成字段映射
- 到「保存并运行包」步骤,选择「保存SSIS包」,可保存到SQL Server或本地文件系统
- 打开SQL Server Data Tools(SSDT)或在SSMS集成服务目录找到该包,修改平面文件连接管理器:
- 右键连接管理器 → 属性 → 打开
Expressions,选择ConnectionString,输入表达式:"C:\\YourCSVFolder\\" + @[User::FileName] - 添加「Foreach循环容器」,设置枚举器为「Foreach文件枚举器」,指定文件夹路径和筛选器
*.csv - 将原数据流任务拖入循环容器,配置循环变量映射到
User::FileName - 运行SSIS包即可批量导入所有CSV
- 右键连接管理器 → 属性 → 打开
注意事项
- 确保SQL Server服务账户拥有目标文件夹的读取权限,否则会出现文件访问失败
- 所有CSV文件的列顺序、数据类型必须与目标表完全匹配,避免导入错误
- 若CSV存在特殊格式(如多行字段),需调整BULK INSERT参数或在SSIS包中配置相应解析规则
内容的提问来源于stack exchange,提问作者Annachiara
相关产品推荐
相关产品推荐

