SSIS Foreach 循环将不同的 SQL Server 视图数据枚举到单个临时表中

问题描述

我正在尝试设置 SSIS 包以将多个视图数据加载到单个临时表中。所有视图具有相同的列结构,需要加载到具有相同列结构的临时表中。

目的:我们有 30 个不同的视图,每个视图包含不同的逻辑,需要输入到单个目标表中。

当前的解决方案:使用包含 30 个不同序列容器的 DFT 任务,每个视图包含简单的源和目标适配器。

所需解决方案:使用单个 Foreach 循环容器并枚举 30 个视图并将每个视图的结果加载到单个目标表中。如果将来需要,这可以帮助我们轻松扩展任务。

解决方法

找出答案:

  • 创建了两个变量。变量 1 为对象数据类型,变量 2 为字符串

  • 使用执行 SQL,编写如下示例的 SQL 语句,并将“结果集”属性设置为“完整结果集”,在结果集属性上为结果名称 0 分配对象类型变量。

    Select 'select * from view1' as SQL_Code UNION ALL
    Select 'select * from view2' as SQL_Code 
    
  • 添加了一个带有集合的 Foreach 循环作为“Foreach ADO 枚举器”

  • 在 Enumerator Configuration 下,选择 Object 类型的 Variable1 并将 Enumeration 模式设置为“Rows in the First Table”

  • 在 Foreach 循环变量映射中,选择 Variable2,它是字符串数据类型。

  • 在 Foreach 循环内部,添加了一个 DFT 任务,并使用了一个简单的源和目标适配器。在源适配器中,选择 SQL Command from Variable 选项并选择 Variable2 作为源。然后将源适配器和目标适配器的 ValidateExternalMetadata 属性设置为“False”,并将 DFT 任务的 DelayValidation 属性设置为 True。

现在,当我执行包时,执行 SQL 任务会为我在执行 SQL 任务的 sql 语句中编写的每个视图加载对象变量的 Variable1,每行作为“Select * from View”

Foreach 循环,枚举每一行并将“Select * from View1”语句加载到 Variable1,这将是每次加载的源 SQL 命令。