SSIS:使用 table 提供单个 SQL Server 2012 查询和 DB2 查询,其输出将插入单个 SQL Server 列

SSIS: use a table to provide a single SQL Server 2012 query and DB2 query whose outputs will be inserted into a single SQL Server column

我最好的可视化尝试:

ForEach row in dbo.runThese 

**** Start Loop

(grab select statements from sql table)


dbo.runThese

输出:

ID   db2_script                           sql_script
---------------------------------------------------------------------------
1    'select count(\*) from db2_cstmr'    'select count(*) from sql_cstmr'

(运行 每个脚本在一个单独的 DB2 和 SQL 服务器数据库连接上)

(用每个结果创建一个组合字符串)

149, 149

(将组合结果插入 SQL 服务器 table)

INSERT INTO dbo.storeResults
VALUES (149,149)

**** End Loop

我看到了三种不同的方法来执行此操作,但我将提供我认为最优雅的一种。我将根据包内的位置拆分任务:

1.变量

  • Object 数据类型的新变量 "Statements",它将保存 db2 和 sql 服务器语句的列表
  • db2_script: 字符串
  • sql_script: 字符串
  • id: int32

2。控制流程

  • 执行SQL任务:将所有记录(sql语句)获取到对象变量中,使用如下内容:SELECT id,db2_script,sql_script 来自 dbo.StatementsToExecute。需要将组件的ResultSet属性设置为"Full result set",并在Result Set窗格中配置object变量
  • For Each Loop:在Collection窗格中使用对象变量作为枚举器(Foreach From Variable Enumerator),并在Variable Mapping窗格中分配给db2_script、sql_script和id变量
  • 数据流组件(见下)

3。数据流

  • OLEDB Source for DB2 database: specify variable db2_script for source statement (Data access mode: SQL command from variable)
  • OLEDB Source for SQL Server database: specify variable sql_script for source statement (Data access mode: SQL command from variable)
  • 使用高级编辑器编辑两个源,进入 "Input and Output Properties" 选项卡,单击 "OLE DB Source Output",设置 IsSorted=True,单击 "OLE DB Source Output"->"Output Columns"-> db2_count/sql_count
  • MERGE:将两个源合并到一个管道和两个不同的输出列中
  • OLEDB 目标:将 db2_count 和 sql_count 映射到目标列

注意: 您需要在每个 Select 语句中为计数提供别名(例如 SELECT COUNT(*) AS db2_count FROM ...) 因为它们会给数据流管道中的列命名。另一种方法是在高级模式下编辑两个源并给出临时名称