【问题标题】:Dynamic Columns in Flat File Destination平面文件目标中的动态列
【发布时间】:2011-07-14 21:23:37
【问题描述】:

我正在开发一个通用 SSIS 包,它接收一个平面文件,向其中添加新列,并生成一个新的平面文件。

我遇到的问题是新列的数量因存储过程 XML 参数而异。我尝试使用“执行流程任务”来调用 BCP,但是 XML 参数对于命令行来说太长了。

我在网上搜索,发现您无法在运行时动态更改 SSIS 包,我必须使用脚本任务来生成输出。我开始走这条路,发现您仍然必须让脚本组件知道列将如何接收,而这正是我在设计时所不知道的。

我从CozyRoc 找到了第三方 SSIS 扩展,但我想不使用任何扩展。

有人做过这样的事吗?

谢谢!

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

    如果在运行时列数未知,那么您将不得不动态执行某些操作,这意味着使用脚本任务和/或脚本组件。

    工作流程可能是:

    1. 解析 XML 以获取行数
    2. 保存包变量中的行数
    3. 根据变量向平面文件添加列

    这一切都可以使用脚本任务来实现,尽管如果不涉及数据流,在外部 Perl 脚本或 C# 程序中完成整个事情并从您的包中调用它可能会更容易。

    【讨论】:

    • 我遇到的问题在于您的第 3 步。如何动态地将列添加到平面文件中?
    • 我不知道:你是添加空列还是添加数据列?如果有数据,它来自哪里?我现在会忘记 SSIS 并制定出您需要实现的逻辑;然后,您可以决定使用脚本任务或外部程序来实现它。
    • 嗨@Pondlife,这是场景:我有一个存储过程,可以返回,比如说,最多3列X,Y和Z。有时一个客户只需要X,另一个客户需要X 和 Y 以及其他一些客户端需要 X 和 Z。您认为我可以使用脚本任务并仅根据 SP 参数传递输入列吗?谢谢。
    • @Jose 是的,应该可以正常工作:脚本任务(或组件)可以做任何 .NET 可以做的事情。或者,如果你提到的第三方组件能满足你的需求,那就买吧(我知道你说过你不想,但你没有说为什么)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多