如何将单个文件夹中多个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
相关产品推荐
相关产品推荐

