SSIS中如何基于Excel数据生成动态查询抽取DB2数据到SQL Server
SSIS实现按Excel条件抽取DB2数据到SQL Server的方案
以下提供两种可直接落地的实现方式,可根据实际数据量选择:
方案一:SSIS原生组件直接实现(无需提前导入中间数据)
- 第一步:配置三类连接管理器,分别创建DB2的OLE DB/ODBC连接、Excel文件连接、目标SQL Server的OLE DB连接。
- 第二步:添加Foreach循环容器,配置遍历对象为Excel的全量记录,将每行的
Number、From date、To date、Country四个字段分别映射到4个SSIS变量,比如User::var_Number、User::var_FromDate、User::var_ToDate、User::var_Country。 - 第三步:在Foreach循环容器内部添加数据流任务,数据流中先添加OLE DB源,连接选择DB2连接,数据访问模式选「SQL命令」,输入参数化查询语句:
SELECT * FROM dbo.Test WHERE Number = ? AND Date BETWEEN ? AND ? AND Country = ?
进入参数映射配置页,将4个?占位符依次对应之前创建的4个SSIS变量,注意匹配DB2侧的字段数据类型。
- 第四步:OLE DB源后添加OLE DB目标,连接选择SQL Server目标表,完成字段映射即可运行。
注意:如果DB2侧的
dbo.Test数据量较大,建议提前给Number、Date、Country字段建联合索引,避免176次循环查询效率过低。
方案二:先导入中间表关联处理(性能更优,适合大部分场景)
该方案符合你提到的「先将DB2数据和Excel数据导入MS SQL中处理」的需求,无需循环执行176次查询,整体效率更高。
- 第一步:在SQL Server中创建两个临时中间表:
- 条件表
stg.Excel_Conditions,字段对应Excel结构:Number、FromDate、ToDate、Country - 数据表
stg.DB2_Test,结构和DB2侧的dbo.Test完全一致
- 条件表
- 第二步:新建第一个数据流任务,将Excel的176条记录全量导入
stg.Excel_Conditions表。 - 第三步:新建第二个数据流任务,将DB2侧的
dbo.Test全量导入stg.DB2_Test表;如果DB2表数据量极大,可提前从stg.Excel_Conditions取出最小、最大日期,先过滤DB2的日期范围再同步,减少传输的数据量。 - 第四步:添加执行SQL任务,直接通过关联查询插入最终目标表,语句示例:
INSERT INTO dbo.你的目标表 (字段1,字段2,......字段N) SELECT t.* FROM stg.DB2_Test t INNER JOIN stg.Excel_Conditions c ON t.Number = c.Number AND t.Country = c.Country AND t.Date BETWEEN c.FromDate AND c.ToDate
内容的提问来源于stack exchange,提问作者Souf
相关产品推荐
相关产品推荐

