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

如何将文件夹中所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:15:25