如何用SSIS每日动态读取日期文件夹下CSV并导入SQL表
问题:SSIS动态读取当日日期文件夹下的CSV并导入SQL表
我拥有主文件夹(Digikala),每日会新增一个以日期命名的子文件夹,子文件夹内包含数量不定的CSV文件。需要每日读取当日日期命名的文件夹,提取每个CSV文件名的前10个字符作为新列导入SQL表。已尝试SSIS的For Each Loop及变量提取字符,但只能手动指定单个文件夹,无法满足每日动态执行的需求,求解决方案。
解决方案:通过SSIS变量动态定位当日文件夹
1. 生成动态文件夹路径变量
- 新建字符串变量
var_DailyFolderPath,启用EvaluateAsExpression属性,根据你的子文件夹日期格式设置表达式:- 若子文件夹格式为
20240520(无分隔符):"C:\\实际根路径\\Digikala\\" + (DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0"+(DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT("0"+(DT_WSTR,2)DAY(GETDATE()),2) - 若子文件夹格式为
2024-05-20(横杠分隔):"C:\\实际根路径\\Digikala\\" + (DT_WSTR,4)YEAR(GETDATE()) + "-" + RIGHT("0"+(DT_WSTR,2)MONTH(GETDATE()),2) + "-" + RIGHT("0"+(DT_WSTR,2)DAY(GETDATE()),2)
C:\\实际根路径为你的主文件夹实际路径,变量会自动计算当日对应的子文件夹路径。 - 若子文件夹格式为
2. 配置For Each Loop遍历当日CSV
- 给For Each Loop设置
Foreach File Enumerator,在表达式面板中,将Directory属性绑定到var_DailyFolderPath变量 - 设置文件筛选为
*.csv,确保只遍历目标CSV文件 - 在
Variable Mappings中,将捕获的文件名映射到一个新字符串变量var_FileName(用于后续提取前缀)
3. 派生文件名前缀列
- 在数据流任务中,添加派生列组件,新建列(如
FileNamePrefix),表达式设置为:
该表达式会提取文件名的前10个字符作为新列。LEFT(@[User::var_FileName], 10)
4. 导入SQL表
- 将派生列后的数据流连接到OLE DB目标,完成所有列(包括
FileNamePrefix)与SQL表字段的映射 - 确保SQL表已提前创建对应结构,包含新增的前缀列
5. 自动调度
- 在SQL Server Agent中创建作业,设置每日执行计划,自动运行该SSIS包即可实现每日自动处理。
内容的提问来源于stack exchange,提问作者PaDideh
相关产品推荐
相关产品推荐

