0

我想做的事情有很多方面,但我认为学习一件可以让我得到其余的。

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

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

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

4

3 回答 3

0

您可以在循环文件时使用变量来存储文件名,并且在文件加载到表后,您可以使用当前文件名插入/更新日志表。

于 2018-11-27T10:03:59.980 回答
0

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

于 2018-11-27T20:12:28.520 回答
0

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

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

示例 SQL 插入:

INSERT INTO YourDataBase.YourSchema.YourTable (ColumnToHoldFileName)
VALUES (?)
于 2018-11-27T15:42:27.743 回答