从 SSIS 包中的其他对象添加数据以填充 table 的字段

Add data from other object within SSIS package to populate a field for a table

我想做的事情有很多方面,但我认为学习一个就会让我推导出其余部分。

我有一个 SSIS 包,它使用 powershell 下载一个公开可用的 zip 文件,一个使用 7zip 解压缩的执行脚本,然后数据流将解压缩的文件加载到相应的 tables。

我想要做的是将任何一个解压缩文件的文件名(以及最终文件的其他方面,如创建日期、记录计数等)添加到日志 table跟踪文件的摘要级详细信息。

如何将此类信息动态存储为包的一部分?派生列?但是输入是什么?谢谢!

您可以在循环文件时使用变量来存储文件名,并且在文件加载到 table 之后,您可以使用当前文件名来 insert/update 记录 table .

有许多选项可以通过 SSIS 动态处理文件。下面是一种方法的概述。当然,这可能会有所不同,具体取决于您的具体需求和要求。

  • 添加 Foreach 循环容器。在 Collection 窗格中,文件夹 属性 可以使用 GUI 以及通过带有 Directory 的参数或变量 表达。也可以通过选中 "Traverse subfolders" 复选框或使用 Recurse 表达式(如文件夹字段)来设置搜索子文件夹。
  • 文件字段将指示要使用的文件,可以使用通配符 用过的。 * 将匹配任意数量的字符。为了 例如,*.csv 将获取所有 csv 文件,无论名称和 Test*.txt 将 return 所有名称以 Test 开头的 .txt 文件, 无论后面有多少字符或哪些字符。将此限制为 单个字符,使用 ?FileSpec 表达式将允许 这将通过变量或参数动态设置,类似于目录。
  • “变量映射”窗格将允许设置一个变量来保存目录中的文件名。添加一个将文件名保存到索引 0 的变量以映射这些文件。
  • 您表示要存储文件名。可以从 Collection window 上的 "Retrieve file name" 字段控制详细信息。顾名思义,Fully Qualified 将包含完整的文件路径,Name and Extension 将 return 包含扩展名的文件名,而 Name Only 只是文件名。
  • 至于文件的其他方面,我建议为此使用脚本任务以获得更多功能。 C# FileInfo class 提供了用于查找文件详细信息的选项,例如创建日期、上次访问文件的时间以及最近写入文件的时间。有关此的其他信息,请参见 here
  • 对于文件中的记录计数,您需要为此创建连接管理器并使用包中的数据。我假设这些是平面文件?如果是这样,创建一个平面文件连接管理器,并将 Foreach 循环的变量映射窗格中的相同变量设置为连接管理器的 ConnectionString 表达式,将允许您动态循环遍历每个文件。如果您决定这样做,请确保 Fully Qualified 选项像之前一样用于 "Retrieve file name" 字段。您还需要提前为连接管理器配置正确的列和数据类型。 Excel 文件可以遵循相同的过程,但是带有文件名的变量将用于 ExcelFilePath 表达式。
  • 至于在日志中存储有关文件的信息table,有多种选择。下面是放置在 Foreach 循环中的 Execute SQL Task 中的 Insert 语句的一个非常基本的示例。仅当您使用的 table 与连接管理器的初始目录不同时,才需要由 3 部分组成的 table 名称。 ? 是参数标记(假设这是一个 OLE DB 连接)。在此之后,使用参数映射窗格映射存储文件名的相同 variable/parameter。将方向设置为 Input,适当的数据类型(可能是 VARCHAR/NVARCHAR),Parameter Name 字段中的 0 表示这是 SQL 语句中的第一个参数(附加 ? 可以用于 SQL 语句中的后续参数,然后根据该字段递增),默认的 Parameter Size 可以保留为-1。同样,这是一个简单的示例,您可能希望存储更多关于文件及其内容的信息,但这可以帮助您入门。

样本SQL插入:

INSERT INTO YourDataBase.YourSchema.YourTable (ColumnToHoldFileName)
VALUES (?)

看了其他帖子才知道的。我不得不扩大参数大小...轻松修复!