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

如何用SSIS将多文件夹中的多份Excel文件导入SQL Server表?

SSIS批量导入多文件夹Excel/CSV到SQL Server的解决方案

一、解决仅.csv导入、.xlsx未加载的问题

  • 检查Excel Source连接配置
    • Excel 2019文件必须选择Microsoft Excel 2016-2019版本(连接管理器的“Excel版本”下拉框),别选旧版的Excel 97-2003,否则识别不了.xlsx文件。
    • 手动编辑连接字符串时,要包含Extended Properties="Excel 12.0 Xml;HDR=YES;",这是.xlsx文件的标准扩展属性,缺了会导致连接失败。
  • 拆分Excel和CSV的处理逻辑
    • 在Data Flow里加Derived Column组件,用TOKEN(@[User::CurrentFileName],".",-1)提取文件扩展名,再用Conditional Split组件判断:如果是.xlsx走Excel Source,.csv走Flat File Source(CSV用Flat File Source比硬套Excel Source更稳定)。
    • 优先处理.xlsx的话,把.xlsx的分支条件放在Conditional Split的最前面,确保先加载Excel文件。
  • 排查错误输出日志
    • 打开Flat File Destination里的错误日志,看看.xlsx文件是不是因为列名、数据类型和SQL Server目标表不匹配,被错误路由到了错误文件,没写入OLE DB。

二、解决For Each Loop仅遍历单个文件夹文件的问题

  • 正确配置For Each Loop枚举器
    • 选Foreach File Enumerator,在“集合”选项卡:
      • 根文件夹选最上层目录,必须勾选**“遍历子文件夹”**,不然只会扫当前文件夹的文件,不会递归子文件夹。
      • 文件筛选栏填*.xlsx;*.csv,确保只加载目标格式文件,也可以分开两次循环,先扫*.xlsx再扫*.csv,强化优先加载Excel的逻辑。
  • 绑定变量实现动态文件切换
    • 建一个用户变量(比如User::CurrentFilePath,类型设为String,长度设长点),让For Each Loop把遍历到的完整文件路径赋值给这个变量。
    • 在Excel和Flat File连接管理器的属性里,给ConnectionString加表达式,绑定到@[User::CurrentFilePath],这样每次循环都会自动切换到下一个文件,不会一直用初始配置的文件。
  • 检查容器嵌套关系
    • 必须把整个Data Flow Task放到For Each Loop容器里面,要是Data Flow在容器外面,包只会执行一次,自然只加载一个文件。

额外验证步骤

  • 开调试模式运行,盯着CurrentFilePath变量的实时值,确认是不是真的遍历到了所有目标文件夹里的文件。
  • OLE DB Destination选表或视图 - 快速加载模式,根据目标表结构勾选“检查约束”“启用标识插入”,避免因为写入模式限制导致数据没写入。
  • 核对SQL Server目标表和源文件的列结构:列名要对应,数据类型要匹配(比如Excel的日期列对应SQL的DATE或DATETIME,数值列对应INT或DECIMAL),类型不匹配会导致数据被过滤或报错。

内容的提问来源于stack exchange,提问作者Rina Hafizhah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:32:09