我对 ssis 有一点疑问,文本文件具有基于位置的位置数据,需要在 sql server 中动态创建表并使用 ssis 包加载相关位置数据,
源文本文件具有如下所示的示例数据
编号 |名称 |地点
1 | abc |海德
2 |巴努|陈
3 |杰|邦
4 |哈里|海德
5 |纳尼 |海德
6 |班提|邦
7 |卡利 |陈
基于此文本文件加载,我们需要动态创建位置表并加载相关数据。因为有时文本文件中可能有更多位置,这种情况我们需要动态创建表并加载它。请告诉我如何使用来完成此任务ssis.我们需要 foreach 循环容器,但不知道如何实现这个。请告诉我解决这个问题
1)DFT任务(获取不同的位置和各自的表名称)
- 创建第一个 DFT 以从文件中获取不同的位置。添加聚合转换并将输入列指定为位置,然后选择操作作为 GroupBy,这将为您提供文件中的不同位置
- 然后,添加派生转换以获取位置及其各自的表名称
表名 - (DT_STR,50,1252)("dbo.LocationList" + 位置)
位置 - (DT_STR,50,1252)位置
- 添加记录集目标并将 TableName 和 Location 值存储在对象类型的变量(名称 = Locations)中
2)Foreach循环容器任务(创建表并存储数据)
-
Foreach 循环容器配置 -
- 选择枚举器作为“Foreach ADO 枚举器”
- 选择源变量作为“位置”
- 枚举器模式 - 第一个表中的行
- 在变量映射中,分别在两个变量“location”和“Locationtable”中获取位置和相应的表名称。
-
在容器中添加 SQL 任务(如果不存在则创建表)
"如果 Object_Id('" + @[User::Locationtable] + "') IS NULL
创建表 " + @[用户::位置表] + "
(
id 整数,
名称 Varchar(50)
)”
-
在容器中添加DFT任务(将数据导入到各自的表中)
- 添加平面文件源以从同一源文件获取加载数据
- 添加条件分割并添加表达式“location == @[User::location]”以获得匹配的输出
- 添加 OLEDB 目标并将访问模式设置为“OpenRowset using FastLoad From Variable”
- 选择变量“用户::位置表”
注意 - 您需要为“User::Locationtable”变量提供默认值,该变量具有数据库中存在的表名称并且具有相同的架构,以便您可以映射第二个 DFT 任务中的列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)