【问题标题】:Dynamic table create and load data in ssisssis中动态表创建和加载数据
【发布时间】:2015-02-26 09:35:17
【问题描述】:

我对ssis有一点疑问,文本文件有基于位置的位置数据需要在sql server中动态创建表并使用ssis包加载相关的位置数据, 源文本文件具有如下示例数据

标识 |姓名 |地点 1 | abc |海德 2 |巴努|陈 3 |斋 |砰 4 |哈里|海德 5 |纳尼 |Hyd 6 |班蒂|砰 7 |卡莉|陈

基于此文本文件加载,我们需要动态创建位置表并加载相关数据。由于某些时间可能在文本文件中有更多位置,因此我们需要动态创建表并加载它。请告诉我如何实现这个任务使用 ssis。我们需要 foreach 循环容器,但不知道如何实现这个。请告诉我解决这个问题

【问题讨论】:

  • 您能否提供有关您的问题的更多信息?你想为文件中存在的每个位置创建位置表吗?或者您是否要创建一个表,该表在导入时将在文件中包含所有不同的位置?谢谢

标签: ssis ssis-2012


【解决方案1】:

1) DFT 任务(获取不同的位置和相应的表名)

  • 创建第一个 DFT 以从文件中获取不同的位置。添加聚合转换并将输入列作为位置并选择操作作为 GroupBy,这将为您提供文件中的不同位置
  • 然后,添加派生转换以获取位置及其各自的表名 表名 - (DT_STR,50,1252)("dbo.LocationList" + 位置) 位置 - (DT_STR,50,1252)位置
  • 添加记录集目标并将 TableName 和 Location 值存储在 object 类型的变量 (name = Locations) 中

2) Foreach 循环容器任务(创建表和存储数据)

  1. Foreach 循环容器配置 -

    • 选择枚举器作为“Foreach ADO 枚举器”
    • 选择源变量作为“位置”
    • 枚举器模式 - 第一个表中的行
    • 在变量映射中,分别在两个变量“location”和“Locationtable”中获取位置和相应的表名。
  2. 在容器中添加 SQL 任务(如果不存在则创建表)

    • 将 SQL 源表达式提供为 -

    "如果 Object_Id('" + @[User::Locationtable] + "') 为 NULL 创建表 " + @[用户::位置表] + " ( id int, 名称 Varchar(50) )"

  3. 在容器中添加 DFT 任务(将数据导入到相应的表中)

    • 添加平面文件源以从同一源文件中获取加载数据
    • 添加条件拆分并添加表达式“location == @[User::location]”以获得匹配的输出
    • 添加 OLEDB 目标并将访问模式设置为“OpenRowset Using FastLoad From Variable”
    • 选择变量“User::Locationtable”

注意 - 您需要为“User::Locationtable”变量提供默认值,该变量具有数据库中存在且具有相同架构的表名,以便您可以在第二个 DFT 任务中映射列。

【讨论】:

  • 嗨,我在第二个 dft 任务中配置目标变量并传递默认值。你能告诉我我们在哪里传递 locationtable 变量的默认值吗?请你附上包
  • 您好,请使用this linkmsdn link 了解如何为变量提供默认值。抱歉,我无法在此处附加包裹。
  • 不错的简化解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
相关资源
最近更新 更多