如何在SSIS中读取带日期时间戳的当日文件并写入SQL Server表
解决SSIS读取带当日日期+动态时间戳文件的方法
方法一:使用Foreach循环容器(推荐,低代码)
这种方式无需复杂脚本,适配绝大多数常规场景:
调整变量配置
- 保留你已有的
DateVar(格式yyyyMMdd),新增以下变量:InputFilePath:存储文件所在文件夹的完整路径(例如D:\DataFiles\)FilePattern:通过表达式生成文件匹配规则,表达式设置为:@[User::myFile] + "_" + @[User::DateVar] + "*.txt"CurrentFileName:用于暂存循环到的单个文件名,数据类型设为字符串
- 保留你已有的
配置Foreach循环容器
- 拖入Foreach循环容器,双击打开编辑器
- 在集合选项卡,选择「Foreach File Enumerator」
- 「文件夹」选择变量
@[User::InputFilePath],「文件」选择变量@[User::FilePattern] - 按需勾选「遍历子文件夹」(不需要则取消)
映射文件名到变量
- 切换到变量映射选项卡,选中
User::CurrentFileName,索引设为0(对应枚举到的文件名)
- 切换到变量映射选项卡,选中
动态配置平面文件连接
- 打开平面文件连接管理器的属性面板,设置
ConnectionString的表达式为:@[User::InputFilePath] + @[User::CurrentFileName]
- 打开平面文件连接管理器的属性面板,设置
完成数据导入逻辑
- 在Foreach循环容器内拖入数据流向任务,用平面文件源(关联上述连接管理器)和OLE DB目标(指向SQL Server目标表)搭建数据流转流程
方法二:脚本任务筛选文件(高灵活度)
如果需要更精细的筛选规则(比如排除特定时间段的文件),可以用脚本任务实现:
设置变量
- 保留
DateVar、InputFilePath,新增FileList(数据类型设为Object,用于存储筛选后的文件路径列表)
- 保留
编写脚本任务代码
- 在脚本任务的「ReadOnlyVariables」中选择
User::InputFilePath、User::DateVar,「ReadWriteVariables」选择User::FileList - 示例C#代码:
using System.IO; using System.Collections.Generic; public void Main() { string folderPath = Dts.Variables["User::InputFilePath"].Value.ToString(); string targetPrefix = "myFile_" + Dts.Variables["User::DateVar"].Value.ToString(); List<string> validFiles = new List<string>(); foreach (string fullPath in Directory.GetFiles(folderPath, "myFile_*.txt")) { string fileName = Path.GetFileName(fullPath); if (fileName.StartsWith(targetPrefix)) { validFiles.Add(fullPath); } } Dts.Variables["User::FileList"].Value = validFiles; Dts.TaskResult = (int)ScriptResults.Success; }
- 在脚本任务的「ReadOnlyVariables」中选择
结合Foreach循环批量处理
- 拖入Foreach循环容器,集合类型选择「Foreach From Variable Enumerator」,关联变量
User::FileList - 后续步骤同方法一,映射文件名变量、配置平面文件连接、完成数据导入
- 拖入Foreach循环容器,集合类型选择「Foreach From Variable Enumerator」,关联变量
注意事项
- 若需使用SQL Server所在服务器的日期而非包运行机器的本地时间,可将
DateVar的赋值逻辑改为从数据库获取(比如执行SELECT CONVERT(varchar(8), GETDATE(), 112)) - 确保平面文件连接管理器的格式设置(分隔符、编码、列数等)与目标文件完全匹配
- 可在Foreach循环前添加判断逻辑,检查是否存在符合条件的文件,避免空循环消耗资源
内容的提问来源于stack exchange,提问作者faujong
相关产品推荐
相关产品推荐

