SSIS:将数据转换为具有可变行的固定宽度文本

时间:2016-12-01 08:08:38

标签: sql-server file text ssis

我试图从SQL select中使用SSIS创建纯文本。问题是SSIS使文件像表一样,我需要它以特定的格式。

例如,我有这个结果:

bill_id    | concept    |concept_type |amount |
-----------|------------|-------------|-------|
334455     |concept1    |product      |12     |
334455     |concept2    |product      |10,5   |
334455     |concept3    |service      |45,8   |
334455     |concept4    |service      |1,05   |
334455     |concept5    |service      |12,5   |
334455     |concept6    |service      |14,6   |
334455     |concept7    |service      |108    |

我需要转变成这样的东西:

00   334455                                          
19                                                   
10   concept1       12.00                            
20   concept2       10.50                            
17                                                   
10   concept3       45.80                            
20   concept4        1.05                            
30   concept5       12.50                            
40   concept6       14.60                            
50   concept7      108.00                            
21   total         204.45                            

所以,我有第一行ID,即第一列的值。 00表示该行是ID。 接下来我们有19,告诉开始产品概念,然后是每个概念的界限。 与17相同,但有服务概念。 最后一个,21,是所有概念的总和。

我知道可以使用C#应用程序完成,但我尝试使用SSIS,因此我可以制作dts文件。

有可能吗?我该怎么办?

由于

1 个答案:

答案 0 :(得分:0)

您的任务的几种方法:

  1. 如评论中所述,您可以使用C#编写脚本转换并执行任何操作。这是一种方法,特别是对于复杂的变换。
  2. 对于纯粹的SSIS方式,您必须将任务分解为子任务。即从SQL中提取数据,通过 bill_id 在循环组中获取所有 bill_ids 的列表,并计算总计,查询由 bill_id 过滤的SQL数据,获取 concept_type 的列表,在 concept_type 上组织循环,查询由 bill_id concept_type 过滤的SQL数据,做一个数据流带行号脚本。然后将结果存储为Recordset并在后续循环中收集所有记录集 你看到了问题?您的转换需要大量数据分组,并且可以在整个记录集上完成。当您进行流数据转换时,SSIS会发光,即行范围。
  3. 回到你的任务 - 我宁愿做SSIS和C#Script Task。 SSIS 执行SQL任务获取结果集并将其存储在Object变量中,然后脚本任务从Object变量获取数据集并使用LINQ等进行所有转换。然后将结果存储到使用C#的文件。