SSIS Foreach循环容器建议

时间:2018-11-20 13:13:41

标签: sql-server ssis visual-studio-2017

我以前没有使用过foreach循环容器,因此需要一些帮助。

我有一个SSIS软件包,该软件包目前正在执行某些操作(从excel导入数据库,进行一些合并,进行一些联接)。

基本上,最后我完成了一个包含以下字段的表(已修改):

Invoice number
Container number
Item number
Item price
item duty
(...)

我需要它为每个发票执行一些特定的SQL(联接,插入公式...),并将其导出到文件名为=发票编号的Excel文件中。

我想得到一个select distinct ROW_NUmber () (...),[Invoice_number] from [invoicetable]并基本上遍历row_number并执行我需要做的事情。

我已经考虑过可能在SQL循环上创建#temp1,#temp2 ...,然后分别导出所有#temp,然后将其删除。

我正在寻找实现这一目标的最有效方法的想法。

我必须说我已经尝试过T-SQL使用cmd获取要导出的文件,但是尝试创建文件时总是出错。

谢谢!

2 个答案:

答案 0 :(得分:1)

我这样做的方法是使用Execute SQL Task用表中的所有发票编号填充对象变量。

然后有一个foreach loop遍历该对象变量,并以脚本任务开始,该脚本任务使用发票编号的值设置目标excel文件的名称,并生成您的SQL命令。数据流的源组件从表WHERE InvoiceNumber={the current invoice number in the loop}中进行选择。

循环的每次迭代将选择一张发票并将其发送到一个名称正确的Excel文件。然后转到下一个发票编号。

答案 1 :(得分:1)

我最终放弃了foreach循环容器。由于输入到表中的数据是一个excel文件,因此中间的数据类型转换存在很多问题,因此循环中没有任何工作需要。我无法遍历发票的“编号/名称”。

我最终将C#作为一个选项并设法将其循环,但是最初无法使其在循环内循环,经过一些试验,我设法获得了所需的结果,并且此过程现在正在运行使用SSIS程序包由4个宏创建的BA,将工作时间从1800分钟减少到3。

C#代码在这里:

C# Variable Excel file output loop