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 ...) 因为它们会给数据流管道中的列命名。另一种方法是在高级模式下编辑两个源并给出临时名称
我最好的可视化尝试:
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 ...) 因为它们会给数据流管道中的列命名。另一种方法是在高级模式下编辑两个源并给出临时名称