0

我有一个 SSIS 数据流任务,它读取包含某些字段的 CSV 文件,稍微调整一下并将结果插入表中。源文件名是一个包参数。那里一切都很好。

现在,我需要处理带有额外字段的稍微不同类型的 CSV 文件。这个额外的字段可以安全地忽略,所以处理本质上是一样的。唯一的区别在于数据源的列映射。

当然,我可以创建整个包的副本并调整数据源以匹配第二种文件格式。然而,这个“解决方案”似乎是可怕的重复:如果处理过程中有任何变化,我将不得不做两次。我宁愿将另一个参数传递给包,它会告诉它要处理哪种文件。

问题是,我不知道如何根据参数从一个数据源或另一个数据源读取 SSIS,因此是这个问题。

4

2 回答 2

1

我将复制 SSIS 包中的连接管理器(CSV 定义)和数据流,并调整它们以适应新的文件格式。然后我将使用您描述的参数来启用/禁用任一数据流。

从本质上讲,SSIS 不适用于可变元数据。如果这将是一个反复出现的模式,我会在 SSIS 上游处理它,构建一个 VB/C# 命令行应用程序将文件切碎成 SQL 表。

于 2013-04-12T00:31:47.310 回答
0

您可以让连接管理器将所有数据推送到 1 列中。然后使用脚本转换组件将数据解析到输出,具体取决于行中的字段数。

您可以根据分隔符将数据拆分为一个字符串数组(当我需要这样做时,我搜索了帮助)。使用数组,您可以知道它的大小,从而知道它连接到的文件类型。

然后,您到目的地的映射可以保持不变。也不需要复制任何组件。

我必须自己做一次类似的事情,因为虽然我使用的文件总是相同的格式——取决于发送文件的系统版本,它可能会改变——因此通过以这种方式在脚本转换中处理它我能够处理文件格式的微小变化。如果文件 99% 始终相同,那没关系。如果它们完全不同,您最好使用单独的文件连接管理器。

于 2013-08-22T19:37:16.957 回答