首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS foreach循环将表中的所有唯一客户分组,并将它们写入自己的文件。

SSIS foreach循环将表中的所有唯一客户分组,并将它们写入自己的文件。
EN

Stack Overflow用户
提问于 2018-01-24 14:46:05
回答 1查看 924关注 0票数 3

我有一张表,存储我所有的客户和他们的发票(少于5k总计),我想使用一个foreach循环容器将每个这些(客户)写到他们自己的文件中,列出他们自己的发票。

我以前使用了一个foreach循环容器来读取/加载/写文件,所以我理解这个部分,但是如何在AccountNumber上应用foreach循环作为枚举器呢?

对于每个文件,我只想要客户的信息。

我的桌子:

代码语言:javascript
复制
AccountNumber   InvoiceNumber   OriginalCharge
A255            2017-11         225.00
A255            2017-12         13.50
A255            2018-01         25.00
D870            2017-09         7.25
D870            2017-10         10.00
R400            2016-12         100.00
R400            2017-03         5.00
R400            2017-04         7.00
R400            2017-09         82.00

因此,这将产生3个文件,并将包括发票/给客户的原始收费。

File 1= Customer A255

File 2= Customer D870

File 3= Customer R400

还是我应该以不同的方式对待这件事?

环境: Server 2014 SSIS-2012

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 16:22:50

你需要应用几个不同的食谱才能做到这一点。

  • 动态文件名
  • 源查询参数化
  • 碎料记录集

假设

您有三个SSIS变量:

  • CurrentAccountNumber字符串(A255的初始值)
  • rsAccountNumbers对象
  • FileNameOutput字符串EvaluateAsExpression = True "C:\\ssisdata\output\\" + @[User::CurrentAccountNumber] + ".txt"

这个包裹看起来就像

代码语言:javascript
复制
[Execute SQL Task] -> [Foreach (Ado.net) Enumerator] -> [Data Flow Task]

执行SQL任务

将结果集类型设置为完全

您的源查询将是SELECT DISTINCT AccountNumber FROM dbo.Invoices;

在“结果”选项卡中,假设OLE DB连接管理器,单击“添加结果”按钮并使用“名称”为0,该变量将成为User::rsAccountNumbers

Foreach (Ado.net)枚举器

将枚举数类型设置为Ado.NET和单个表。使用变量User::rsAccountNumbers并将零元素分配给变量CurrentAccountNumber

运行包,以验证Execute返回Foreach可以分解的结果集。注意到枚举器中的每个循环都会导致变量FileNameOutput的值变化(C:\ssisdata\output\A255.txt,C:\ssisdata\output\D870.txt,等等)

数据流任务

这是一个简单的流程

代码语言:javascript
复制
[OLE DB Source] -> [Flat File Destination]

将OLE DB源配置为查询SELECT * FROM dbo.Invoices WHERE D.AccountNumber = ?;

单击“参数”按钮。将名称0配置为@User::CurrentAccountNumber

平面文件目标-将源连接到目标,创建一个新的平面文件连接管理器并连接列。

动态文件名

最后一部分是编辑上面创建的平面文件连接管理器,以使用变量FileNameOutput,而不是您指定的硬编码值。右键单击平面文件连接管理器并选择“属性”。在结果属性窗口中,找到表达式属性并单击省略号(.)在左侧窗口中查找ConnectionString,在右侧窗口中使用@User::FileNameOutput

F5和包应该启动并生成每个帐号的输出文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48425214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档