SSIS动态表和数据流中的列数

时间:2018-09-23 04:18:02

标签: ssis dataflow

我有一个表(说表A),该表列出了大约10或15个表,每个表具有不同的列数/名称。我需要为所有这些表创建一个遵循相同模式的数据流。 因此,我在SSIS包中有一个Foreach循环,该循环遍历表A中的所有记录,将10或15个表的名称保存在变量中,并进行数据流操作。

在数据流中,它注册我给它的第一个默认表的设计,并带有列名/列号,并且运行完美。问题是当它通过第二个表时,它具有自己的列,并且在这里抛出错误,指出表的元数据不匹配或类似的错误。基本上,表定义是不同的。

如何使SSIS动态创建这些表的设计,我真的不希望每个表具有15个不同的数据流。

建议。

2 个答案:

答案 0 :(得分:2)

不幸的是,SSIS本身不允许这样的情况。 SSIS绑定到元数据,即列名和数据类型;此外,它在运行数据流任务之前检查是否匹配。

您必须为每个表布局创建一个数据流;您可以通过几个数据流和带有任务优先级约束的条件调用来扩展设计。 BIML可以帮助您根据元数据或代码生成SSIS程序包,但限制保持不变-数据设计必须在运行程序包之前固定,并且不能更改

答案 1 :(得分:0)

如果我说有办法呢?

你已经被警告过,这很慢而且很复杂! (最差正常速度的1/3)

1.您可以将所有列合并为一个列并从中创建一个 JSON

我们称之为 json_all。

这可以通过 information_schema 和 SSIS 中的一些动态查询来实现。

2.我们有一个只有 1 列的临时表,我们将这些数据插入到该表中。

3.我们打开 JSON 并将其插入到最终表中。

通过这种方式,您可以为所有表固定元数据。 (所有这些只有 1 个名为 json_all 的列作为输出,而您的目标表只有 1 个与输入同名的列)

如果您有很多行数有限的表,这将非常有用。 (20 分钟内 100 万是我的基准)