【问题标题】:Logging number of rows transfered using script task without using SSIS logging记录使用脚本任务而不使用 SSIS 日志记录传输的行数
【发布时间】:2012-10-22 16:08:23
【问题描述】:

我在一个序列容器中有超过 40 个独立的数据流任务。

有没有办法将序列容器内的每个数据流任务中传输到目标的行数记录到平面文件中?

我试过这个方法:

  1. 使用行计数任务将行计数值存储到变量中。
  2. 执行目标表任务。
  3. 在数据流任务之后执行脚本任务将行计数变量写入平面文件。

此方法有效,但我必须继续为该容器内的每个数据流任务添加脚本任务。

有没有办法让这个脚本在每个数据流任务完成后自动执行,写入每个数据流任务传输的行数,自定义文本说“xyz 数据流任务传输 xxxx 行”?

【问题讨论】:

    标签: c# vb.net ssis


    【解决方案1】:

    每个数据流需要一个主包、一个“包处理程序包”和一个子包。

    首先,在您的主包中,调用“包处理程序包”的次数与您拥有数据流的次数一样多。对于每一个,设置一个具有包文件路径的作用域变量。

    在“包处理程序包”中,调用表示数据流的子包(使用包含文件路径的父包变量),并且在执行包任务成功时,调用将写下一个变量的脚本保存文件(或表,或任何你想要的地方)中的行数。

    在每个子包中,只需将行计数转换添加到您的包并将值写入父包变量。

    所以包的顺序是这样的:

                   MasterPackage.dtsx
                     |             |
                     |             |
     PackageHandler.dtsx         PackageHandler.dtsx
            |                           |
            |                           |
     ChildPackage_1.dtsx         ChildPackage_2.dtsx
    

    注意:你的子包里会有一个错误告诉你父包变量在这个包中不存在,没关系。它将在运行时工作。

    【讨论】:

    • 附带说明,我在每个项目中都使用这种技术来记录包开始、包结束、行数等。
    • 一般方法+1。 Andy Leonard 在他的Stairway to Integration Services 系列中展示了类似的方法。值得一读。
    • 感谢 Dominic,作为 SSIS 的新手,我不知道如何配置 Master Package 和 Package Handler 包。所以我最终做的是使用 SSIS 日志将日志数据写入 XML 格式,最后使用另一个脚本任务来解析该日志文件并提取我需要的相关数据并编写一个新的更简单的文本文件。它满足了我的要求,我能够根据需要自定义文本文件。而且我不必更改数据任务流程。
    【解决方案2】:

    如果您不想一次又一次地添加脚本任务,我建议您创建一个自定义数据流组件。

    这将是一次性的工作,但可以在您可能拥有的各种 SSIS 项目中一次又一次地重复使用。

    【讨论】:

      【解决方案3】:

      我们使用http://pragmaticworks.com/Products/BI-xPress - 它获取包并插入可配置的审计框架。确实有点贵,但最好评估一下可用的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 2011-10-21
        • 2016-07-21
        相关资源
        最近更新 更多