将 CSV 导入与 SSIS 包中的用户变量组合

Combining CSV import with User Variable in SSIS package

提问人:Optimaximal 提问时间:5/15/2023 最后编辑:Optimaximal 更新时间:5/16/2023 访问量:126

问:

我正在将许多CSV文件导入数据库。目的是从文件中获取数据,但也将关联的 CSV 文件的文件名写入每个数据库行。

我在数据流中使用脚本组件来捕获 ForEach 循环写入的“当前文件”变量,但我正在努力将其集成到数据流目标 (OLE DB) 中。

Data Flow

如果我使用 UNION ALL,则脚本组件行有自己的具有 NULL 值的行。

Data Reader

两个合并转换的行为大致相同。

我应该如何组合这两个数据源,以便使文件名与目标表中每个文件的所有记录一起重复?

SQL SQL 服务器 SSIS sql-server-2008-R2 DTS

评论

1赞 Jeff 5/15/2023
我可能不会在每一行中包含文件名 - 相反,我会创建一个包含文件信息的单独表,为该表中的每一行分配一个“批处理”ID。然后,我会在每一行中包含该批次 ID。若要执行任一操作(只需将值分配给 SSIS 变量),然后使用派生列任务将变量作为列添加到管道中。

答:

2赞 billinkc 5/16/2023 #1

删除脚本组件和 UNION ALL,因为它们不需要。

相反,添加一个名为 Within the Derived Column 的 Derived Column 组件,使用并为其指定一个好的列名称,例如DER Add file name@[User::filename]FileNameColumnName

如何在目的地使用它取决于您。如果您还没有列,请添加一个ALTER TABLE dbo.MyTable ADD FileNameColumnNamevarchar(250) NULL;

最后,将该列映射到目标。

或者,您可以进入平面文件源的“高级”属性,并将 添加到数据流中,并跳过派生列来注入文件名。FileNameColumnName

使用派生列模式适用于任何文件源(Excel 等),但 FileNameColumnName 内置于平面文件源中,因此无论哪种方式都赞成/反对。

我在“当前文件的名称是什么”下写了它?

评论

0赞 Optimaximal 5/16/2023
就是这么简单🤦 ♂️.当我尝试实现派生列时,我在单独的分支上进行了操作,并再次尝试合并结果。谢谢。有蜱虫!