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

如何在SSIS包中从Excel文件名提取日期并为SQL Server目标表添加Extracted_Date列

我来一步步帮你搞定这个需求,其实核心就是从文件名里抠出日期,再把这个日期作为固定列加到每条数据里,具体操作分这几步:

1. 先创建几个关键的SSIS变量

首先你得在SSIS包里新建几个变量,用来存文件名、解析后的日期这些内容:

  • FileName:字符串类型,用来存储Excel文件的完整路径(如果是批量处理,后续可以通过Foreach循环自动赋值)
  • ExtractedDate:日期类型,用来存储最终解析出来的日期值
2. 从文件名里解析出目标日期

这里推荐用脚本任务来解析,比表达式更灵活,不容易踩格式坑:

  1. 拖一个脚本任务到控制流面板,在脚本任务编辑器里,把FileName设为只读变量,ExtractedDate设为可写变量
  2. 点击“编辑脚本”,用C#写解析逻辑(按你说的规则:emp_20110909.xls里的11是月份、09是日期、09是年份,也就是最终日期是2009-11-09):
public void Main()
{
    try
    {
        // 获取完整文件名(带路径)
        string fullFileName = Dts.Variables["User::FileName"].Value.ToString();
        // 提取纯文件名(去掉路径)
        string fileNameOnly = System.IO.Path.GetFileName(fullFileName);
        // 去掉前缀"emp_"和后缀".xls",得到日期字符串"20110909"
        string datePart = fileNameOnly.Replace("emp_", "").Replace(".xls", "");
        
        // 按规则拆分:年份是最后两位(拼上20前缀)、月份是第3-4位、日期是第5-6位
        string year = "20" + datePart.Substring(6, 2);
        string month = datePart.Substring(2, 2);
        string day = datePart.Substring(4, 2);
        
        // 转成DateTime类型存到变量里
        DateTime parsedDate = DateTime.ParseExact($"{year}-{month}-{day}", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
        Dts.Variables["User::ExtractedDate"].Value = parsedDate;
        
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    catch (Exception ex)
    {
        // 抛出错误方便排查
        Dts.Events.FireError(0, "日期解析失败", ex.Message, string.Empty, 0);
        Dts.TaskResult = (int)ScriptResults.Failure;
    }
}
  1. 保存脚本,关闭编辑器。
3. 搭建数据流任务

接下来在数据流里把日期加到每条数据中:

  1. 拖一个数据流任务到控制流,和前面的脚本任务连起来(确保先解析日期再处理数据)
  2. 在数据流面板里:
    • 拖Excel源:配置Excel连接管理器,如果是动态文件名,记得把连接字符串绑定到FileName变量
    • 拖派生列组件:连接到Excel源,在派生列编辑器里新增一列,命名为Extracted_Date,表达式直接写@[User::ExtractedDate],数据类型选和目标表匹配的(比如DT_DATE或者DT_DBTIMESTAMP)
    • 拖SQL Server目标:连接到你的SQL Server数据库,选择目标表(提前在SQL Server里建好Extracted_Date列,类型用datetime或者date都可以),然后在“映射”页签里,把派生列的Extracted_Date映射到目标表的对应列
4. 批量处理的补充(如果需要)

如果你要处理多个Excel文件,就在控制流里加一个Foreach循环容器:

  • 配置循环容器为“Foreach文件枚举器”,选择存放Excel文件的文件夹,设置文件筛选器为emp_*.xls
  • 在“变量映射”里,把遍历到的文件路径赋值给FileName变量,然后把脚本任务和数据流任务放到循环容器里就行
一些注意事项
  • 确保Excel连接管理器的路径是动态的:右键连接管理器→属性→把ConnectionString表达式绑定到FileName变量
  • 如果遇到Excel版本问题(比如.xlsx),记得调整脚本里的扩展名替换逻辑,以及Excel连接管理器的版本
  • 测试的时候可以先手动给FileName变量赋值,跑一次看看日期解析是否正确,再批量运行

内容的提问来源于stack exchange,提问作者Devid Bun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:28:37