动态表在ssis中创建和加载数据

时间:2015-02-26 09:35:18

标签: ssis ssis-2012

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

id |名字|地点 1 | abc | Hyd 2 |班努|陈 3 | jai | bang 4 | hari | Hyd 5 | nani | Hyd 6 | banti | bang 7 | kali | chen

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

1 个答案:

答案 0 :(得分:5)

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

  • 创建第一个DFT以从文件中获取不同的位置。添加聚合转换并将输入列作为位置并选择oparation作为GroupBy,它将为您提供文件中的不同位置
  • 然后,添加派生的转换以获取位置及其各自的表名 TableName - (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] +“')为空 CREATE TABLE“+ @ [User :: Locationtable] +” (     id int,     名称Varchar(50) )“

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

    • 添加平面文件源以从同一源文件中获取加载数据
    • 添加条件拆分并添加表达式“location == @ [User :: location]”以获得匹配的输出
    • 添加OLEDB目标并将访问模式设置为“使用FastLoad From Variable”的OpenRowset
    • 选择变量“User :: Locationtable”
  4. 注意 - 您需要为“User :: Locationtable”变量提供默认值,该变量具有表名,该表名存在于数据库中且具有相同的模式,因此您可以在第二个DFT任务中映射列。