上一篇介绍了Foreach 循环容器之(Foreach 文件枚举器),主要是关于多文件批量导入数据仓库的问题。今天介绍的还是Foreach 循环容器,主要介绍Foreach ADO 枚举器,循环表中的每一条记录。
介绍需求:
想更新某一个表的状态,条件另一个表是否有这条记录。(如果用T-SQL执行相当简单,建立关系后更新即可)
执行环境:
- --Email基本信息表
- CREATE TABLE EMailTest(ID INT, NAME VARCHAR(20),Email Nvarchar(50))
- GO
- INSERT INTO EMailTest(ID,NAME,Email)
- SELECT 1,'abc','abc@sina.com'
- UNION ALL
- SELECT 2,'cde','cde@sina.com'
- UNION ALL
- SELECT 3,'XYZ','XYZ@sina.com'
- go
- --Email类型表
- CREATE TABLE EmailType(ID INT,EmailType Nvarchar(50))
- GO
- INSERT INTO EmailType(ID,EmailType)
- SELECT 1,''
- UNION ALL
- SELECT 2,''
- GO
效果:
使用SSIS中的执行SQL任务、Foreach 循环容器更新Email类型表的状态。
步骤:
a) 获取EmailTest表的所有数据集
b)配置数据的结果集
c)配置Foreach循环容器,选择枚举器,(Foreach ADO 枚举器、ADO数据源MyDataSet)
d)新建变量映射(此处:用户ID)
e)在 Foreach 循环容器中拖入一个执行SQL任务,配置如下图:
相关更新的SQL 语句为:
- UPDATE EmailType SET EmailType='修改' WHERE ID=?
f)配置Foreach 循环容器中SQL任务中的参数映射。如下图:
注意:参数如果是int,在数据类型选择LONG类型,否则会报参数失败。导致更新失败或者不更新。
g)整个ETL过程如下图:
h) 整个流程图如下:
i)查看执行结果。