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

如何将单个文件夹中多个CSV文件的数据插入SQL单张表?

批量导入单个文件夹下的多个CSV文件到SQL单表

你可以通过动态SQL结合系统存储过程的方式遍历文件夹中的所有CSV文件,逐个执行BULK INSERT操作,实现批量导入。以下是具体实现步骤:

方法一:使用SQL Server动态SQL + xp_cmdshell

1. 启用xp_cmdshell(若未启用)

-- 开启高级选项
sp_configure 'show advanced options', 1;
RECONFIGURE;
-- 启用xp_cmdshell
sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

2. 遍历文件夹获取CSV文件列表

-- 创建临时表存储所有CSV文件路径
CREATE TABLE #CSVFiles (FilePath NVARCHAR(255));

-- 替换为你的CSV文件夹路径,将所有CSV文件路径写入临时表
INSERT INTO #CSVFiles (FilePath)
EXEC xp_cmdshell 'dir "C:\YourCSVFolder\*.csv" /b /s';

3. 批量执行BULK INSERT

DECLARE @FilePath NVARCHAR(255);
DECLARE @SQL NVARCHAR(MAX);

-- 声明游标遍历所有CSV文件
DECLARE csv_cursor CURSOR FOR
SELECT FilePath FROM #CSVFiles WHERE FilePath IS NOT NULL;

OPEN csv_cursor;
FETCH NEXT FROM csv_cursor INTO @FilePath;

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 构建动态BULK INSERT语句,注意转义单引号
    SET @SQL = N'
    USE [dbname]
    BULK INSERT tablename
    FROM ''' + REPLACE(@FilePath, '''', '''''') + '''
    WITH
    (
        FIRSTROW = 2,
        FIELDTERMINATOR = '','',
        ROWTERMINATOR = ''\n'',
        TABLOCK
    )';

    -- 执行动态SQL
    EXEC sp_executesql @SQL;

    FETCH NEXT FROM csv_cursor INTO @FilePath;
END

-- 清理游标和临时表
CLOSE csv_cursor;
DEALLOCATE csv_cursor;
DROP TABLE #CSVFiles;

4. (可选)关闭xp_cmdshell以提升安全性

sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
sp_configure 'show advanced options', 0;
RECONFIGURE;

方法二:使用PowerShell脚本(无需启用xp_cmdshell)

如果不想启用xp_cmdshell,可通过PowerShell遍历文件并执行BULK INSERT:

# 配置参数
$folderPath = "C:\YourCSVFolder\"
$serverName = "YourSQLServerName"
$dbName = "dbname"
$tableName = "tablename"

# 获取文件夹下所有CSV文件
$csvFiles = Get-ChildItem -Path $folderPath -Filter *.csv

foreach ($file in $csvFiles) {
    # 构建BULK INSERT语句
    $bulkInsertQuery = @"
USE [$dbName]
BULK INSERT [$tableName]
FROM '$($file.FullName.Replace("\", "\\"))'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
)
"@

    # 执行SQL语句
    Invoke-SqlCmd -ServerInstance $serverName -Query $bulkInsertQuery
}

注意事项

  • 替换代码中的C:\YourCSVFolder\、[dbname]、tablename、YourSQLServerName为实际值
  • 确保SQL Server服务账户(或执行PowerShell的账户)拥有目标文件夹的读取权限
  • 若CSV文件格式存在差异,需调整FIELDTERMINATOR、ROWTERMINATOR等参数适配文件格式

内容的提问来源于stack exchange,提问作者Rushan Arshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:15:38