0

现有流程的快速介绍:SSIS foreach 循环通过在入口路径文件夹中查找任何文本文件将平面文件导入 SQL Server 表,导入后,它将平面文件转储到存档文件夹中。总共有四个平面文件会发生这种情况,因为它只查找任何文本文件,所以没有问题。

然而,提出的新想法是,SSIS 应该运行一个进程,该进程首先从文本文件中捕获日期和状态(从文件名,而不是文件内部),然后将数据与状态一起插入 SQL Server,然后捕获的日期,然后归档文件。这背后的想法是,如果日期晚或早一个月,SSIS 不会导入该文件(或者如果年份错误,它不会导入它)。

所以现在 - SSIS 首先需要检查是否存在四个文件。- 如果存在四个文件,那么它将进入 foreach 循环(至少,我猜这将是解决此问题的最佳方法)。- 在每个循环中,进程需要从文件名中解析日期和状态,并且需要将数据导入 SQL Server,将解析的日期和状态添加到相应的列中。- 然后它需要存档该文件并继续下一个。

我从来没有做过任何解析,我尝试使用表达式和连接字符串来搜索当前的月份和年份,但没有运气。

(最后,我对 C# 知之甚少,所以脚本任务超出了我的范围)。

4

3 回答 3

2

如果没有脚本组件,我看不到这种情况发生。如果是这样,解决方案将是一堆凌乱的表达。

您可以在 vb.net 或 c# 中执行脚本组件。熟悉 system.IO 命名空间。Directory.GetFiles() 方法将返回给定目录中的所有文件。您可以执行 For Each 循环并解析每个文件名。

如果你对 SSIS 很认真,你需要熟悉脚本组件(包括读取和写入变量)、system.io 命名空间,以及如何单步执行组件代码来探索属性。我很少创建不涉及以编程方式访问文件系统的包,无论是解析文件名、读取文件、移动文件还是删除文件。这一切都可以通过 sys.io 完成。

于 2012-11-16T02:30:11.173 回答
1

SSIS 表达式可能不是这项工作的正确工具。

我会考虑一个脚本任务——我一直坚持使用 VB,我发现它更具可读性并达到了相同的结果。这解锁了漂亮的 Try .. Catch 块和非常丰富的 .NET 库,例如正则表达式。你永远不会回头。

于 2012-11-16T02:24:25.703 回答
0

忘记发布我的解决方案:在不使用任何 C# 或 VB 的情况下,我找到了一种将文件名插入表中并使用 TSQL 解析文件名的方法。使用“执行 SQL 任务”,您可以使用下面的 SQL 语句:

INSERT INTO Table VALUES (?)

将项目的字符串变量设置为当前文件的名称,您将在“参数映射”下进行设置。从那里,您将在 SQL 表中获得完整的文件名并可以对其进行解析。

于 2012-12-03T15:25:57.993 回答