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

bal*_*alu 0 ssis ssis-2012

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

id | 名称| 位置1 | abc | Hyd 2 | banu | chen 3 | jai | bang 4 | hari | Hyd 5 | nani | Hyd 6 | banti | bang 7 | kali | chen

基于此文本文件加载,我们需要动态创建位置表并加载相关数据。由于一段时间在文本文件中可能会有更多的位置,因此我们需要动态创建表并加载它。请告诉我如何使用以下方法来完成此任务ssis。我们需要foreach循环容器,但是不要怎么实现。请告诉我解决这个问题

Swa*_*ilK 5

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

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

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

  1. Foreach循环容器配置-

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

    • 提供SQL源表达式为-

    “如果Object_Id('” + @ [User :: Locationtable] +“')为空,则创建表” + @ [User :: Locationtable] +“(id int,名称为Varchar(50))”

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

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

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