我有一张表,存储我所有的客户和他们的发票(少于5k总计),我想使用一个foreach循环容器将每个这些(客户)写到他们自己的文件中,列出他们自己的发票。
我以前使用了一个foreach循环容器来读取/加载/写文件,所以我理解这个部分,但是如何在AccountNumber上应用foreach循环作为枚举器呢?
对于每个文件,我只想要客户的信息。
我的桌子:
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
谢谢!
发布于 2018-01-24 16:22:50
你需要应用几个不同的食谱才能做到这一点。
假设
您有三个SSIS变量:
"C:\\ssisdata\output\\" + @[User::CurrentAccountNumber] + ".txt"这个包裹看起来就像
[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,等等)
数据流任务
这是一个简单的流程
[OLE DB Source] -> [Flat File Destination]将OLE DB源配置为查询SELECT * FROM dbo.Invoices WHERE D.AccountNumber = ?;
单击“参数”按钮。将名称0配置为@User::CurrentAccountNumber
平面文件目标-将源连接到目标,创建一个新的平面文件连接管理器并连接列。
动态文件名
最后一部分是编辑上面创建的平面文件连接管理器,以使用变量FileNameOutput,而不是您指定的硬编码值。右键单击平面文件连接管理器并选择“属性”。在结果属性窗口中,找到表达式属性并单击省略号(.)在左侧窗口中查找ConnectionString,在右侧窗口中使用@User::FileNameOutput
F5和包应该启动并生成每个帐号的输出文件。
https://stackoverflow.com/questions/48425214
复制相似问题