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

在SSIS包中实现CSV导入并添加对应文件名至数据库行的问询

解决CSV导入时追加文件名到每条记录的方法

核心思路

别把Script Component当成独立数据源去和CSV行集合并,而是把它作为转换组件,直接将文件名变量的值追加到CSV的每一行数据里,这样就能让每条记录自然关联对应的文件名。

具体操作步骤

  1. 确认ForEach循环变量配置
    • 保证ForEach循环的Current File变量(比如命名为User::CurrentFileName)能正确捕获当前遍历的CSV文件路径或文件名。
  2. 添加转换类型的Script Component
    • 把CSV源的输出连接到Script Component,选择转换类型(不是源或目标)。
  3. 配置变量读取权限
    • 进入Script Component编辑器,切换到Script选项卡,在ReadOnlyVariables里添加你的User::CurrentFileName变量,让脚本可以读取这个变量的值。
  4. 新增文件名输出列
    • 切换到Input Columns选项卡,勾选CSV源中需要传到目标表的所有列。
    • 切换到Input and Outputs选项卡,展开Input 0下的Output Columns,点击添加列,命名为FileName(或自定义列名),数据类型选DT_WSTR,长度根据文件名长度设置(比如255)。
  5. 编写赋值脚本
    • 点击Edit Script,在脚本编辑器的Input0_ProcessInputRow方法里,添加代码把变量值赋值给新增列:
      // C#示例
      public override void Input0_ProcessInputRow(Input0Buffer Row)
      {
          // 直接赋值完整路径
          Row.FileName = Variables.CurrentFileName;
          // 如果只需要文件名(不含路径),用下面的代码:
          // Row.FileName = System.IO.Path.GetFileName(Variables.CurrentFileName);
      }
      
      (VB.NET版本代码类似:Row.FileName = Variables.CurrentFileName)
  6. 连接OLE DB目标
    • 把Script Component的输出直接连到OLE DB目标,将包括FileName在内的所有列映射到目标表的对应字段即可。

为什么之前的方法无效

  • UNION ALL/Merge是用来合并结构相同的两个行集,你把Script Component当数据源时,它只会生成单行(甚至空行),和CSV的多行无法匹配关联,所以出现NULL值。
  • 转换类型的Script Component会遍历CSV的每一行,给每行都追加文件名变量的值,刚好实现每条记录和对应文件名的关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:07