【问题标题】:How can I execute an SSIS Package for every item in a Flat File?如何为平面文件中的每个项目执行 SSIS 包?
【发布时间】:2017-07-14 18:36:07
【问题描述】:

我需要为平面文件中的每个项目执行一次包。包的参数将是当前项目的一些属性。最好的方法是什么?我假设我做的最后一件事是在 Foreach 循环容器 中放置一个 Execute Package Task 组件,如下所示:

【问题讨论】:

    标签: sql-server ssis etl ssis-2012 flat-file


    【解决方案1】:

    简单的解决方案

    1. 首先你必须创建一个Object类型的包变量
    2. 添加一个循环遍历平面文件的脚本任务并将其转换为DataTableList(of T) 并将其存储到Object 变量中。
    3. 将脚本任务连接到您正在使用的 foreach 循环
    4. 在 foreach 循环容器中选择枚举类型为 Ado enumerator 并选择 Object 变量作为 Source 并将您要在 execute package task 中使用的列映射到变量

    将平面文件读入数据表

    您可以参考以下链接之一了解更多信息:

    旁注:如果您需要更多详细信息,请给我回复

    【讨论】:

    • 这听起来是个不错的解决方案。我唯一需要更多详细信息的是如何在脚本中创建/填充 DataTable(代码内容)。我应该能够做其他所有事情。感谢您的宝贵时间。
    • 附带说明,与此相比,我的解决方案将非常荒谬。我注意到 Foreach 循环组件可以为目录中的每个文件执行,所以我打算使用脚本组件为每个项目创建一个文件,其中包含其属性。这会占用更多的空间和处理能力,并且更有可能在未来引发问题。
    • @MichaelDrum 我提供了许多可能对您有所帮助的链接。看看
    • 您可以在没有 C# 的情况下执行此操作。执行第 1 步,然后创建一个数据流,将平面文件数据集读入记录集(ADO 对象),然后在 foreach 中遍历该对象。
    • 不知道为什么我对此投了反对票,但这比较了您尝试做的两个选项:stackoverflow.com/questions/45039351/…
    【解决方案2】:

    每个项目都有三个属性:用户名、密码和确切帐户名

    然后这些用于执行带有每个登录凭据的 SSIS 包。

    为了实现这一点,请执行以下操作:

    1. 在主包中创建一个 Object 类型的包变量。
    2. 添加一个循环遍历平面文件并将其转换为 DataTable 或 List(of T) 的脚本任务,并将其存储到 Object 变量中。 (这一步来自哈迪的回答)
    3. 创建一个 foreach 循环以供下一步执行。
    4. 在 foreach 循环容器中,选择枚举类型为 Ado 枚举器,并选择 Object 变量作为 Source。 (也来自哈迪的回答)
    5. 在 foreach 循环中放置一个脚本任务和执行包任务。像这样:
    6. 在主包中为用户名、密码和确切帐户名创建三个字符串变量。
    7. 使用如下代码填充脚本任务的主函数:
    8. 将子包的参数设置为Script Task指定的变量即可!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多