gpt4 book ai didi

sql-server - SSIS foreach 循环将所有唯一客户分组到一个表中并将它们写入自己的文件

转载 作者:行者123 更新时间:2023-12-01 12:15:42 39 4
gpt4 key购买 nike

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

我之前使用过 foreach 循环容器来读取/加载/写入文件,所以我理解那部分,但我如何将 foreach 循环应用于 AccountNumber 作为枚举数?

对于每个文件,我只需要那个客户信息。

我的 table :

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 个文件,并包括给定客户的发票/原始费用。

文件 1 = 客户 A255

文件 2 = 客户 D870

文件 3 = 客户 R400

或者我应该采用不同的方法吗?

环境:SQL Server 2014SSIS-2012

谢谢!

最佳答案

您需要应用一些不同的配方来完成这项工作。

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

假设

你有三个 SSIS 变量:

  • CurrentAccountNumber 字符串(A255 初始值)
  • rsAccountNumbers 对象
  • FileNameOutput String EvaluateAsExpression = True "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 并将第 zeroeth 元素分配给我们的变量 CurrentAccountNumber

按原样运行包以验证执行 SQL 任务正在返回 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 而不是您指定的硬编码值。右键单击平面文件连接管理器并选择属性。在出现的属性窗口中,找到 Expressions 属性并单击省略号 (...) 在左侧窗口中,找到 ConnectionString 并在右侧窗口中使用 @[User::FileNameOutput]

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

关于sql-server - SSIS foreach 循环将所有唯一客户分组到一个表中并将它们写入自己的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425214/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com