【发布时间】:2020-07-13 17:56:07
【问题描述】:
如何使用 SSIS 包循环迭代在平面文件目标中附加特定数据?
来源:emp (SQL Server) 示例数据。在这张表中,我有 100 万条记录
我需要使用循环迭代将特定的 empid 信息加载到平面文件目标中。
样本数据
empid | Ename
------+---------
1 | ab
2 | dg
3 | hg
加载empmaster表中维护的具体empid信息。empmaster表中频繁变化的empids值
表:Empmaster
Empid
-----
1
2
5
6
目标:文本文件 emp.txt
empid | Ename
-------+--------
1 | ab
2 | dg
我试过这样:
-
第1步:创建2个变量
empid(数据类型varchar)和empidresult(数据类型对象) -
第二步:拖拽ExecuteSQL任务,使用oledb连接,SQL命令为:
select distinct empdid from empmaster,结果集为:fullresultset和resultset变量选择empidresult -
第三步:拖拽foreachloopcontainer,容器类型为foreachadoenumerator adoobjectsource变量为:empidresult,变量映射为:empid
-
第四步:在容器内拖拽数据流任务并使用带参数的oledb源连接SQL语句
select empid,ename from emp where empid =? and parameter mapping to empid -
第五步:拖拽flatfiledestination并配置emp.txt文件 在这里,我选择未选中的第一个数据行中的列名并覆盖未选中的文件中的数据并执行包我可以为所需的 empids 数据附加数据,但标题丢失
我尝试了另一种方法 empmaster 记录,我将行转换为列并将结果存储到使用逗号分隔的对象中,但它最多支持 9000 条记录
如果主表有超过 10,000 条记录,则它不工作 我需要第一行作为标题然后保持每个循环迭代应该是目标文件中附加的数据。
如何在 sql server 中完成这个任务?
【问题讨论】:
标签: sql-server ssis ssis-2012