2016-12-01 21 views
1

我试图使用SQL选择中的SSIS创建纯文本。问题在于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        

所以,我的第一线,标识,这是第一列的值。 00表示该行是ID。 接下来我们有19个,告诉开始产品概念,然后是每个概念的线。 和17一样,但有服务理念。最后的21个是所有概念的总和。

我知道它可以用C#应用程序完成,但我试图用SSIS来做,所以我可以制作一个dts文件。

可能吗?我该怎么做?

感谢

+0

既然你知道它是如何在C#中完成的,你可以添加一个脚本组件,并在C#中写你的代码。 – DenStudent

回答

0

您的任务有几种方法:

  1. 正如评论所说,你可以写一个脚本转换在C#中,做任何你想要的。这是一条路,特别是对于复杂的变换。
  2. 对于纯粹的SSIS方式,您必须将您的任务分解为子任务。即通过bill_id从SQL中提取数据,让所有bill_ids的列表,在一个循环组和bill_id计算过滤总,查询SQL数据,并得到concept_type的名单,组织上concept_type,查询循环SQL数据过滤bill_idconcept_type,使用行号脚本执行数据流。然后将结果存储为Recordset并收集后续循环中的所有记录集。
    你看到问题了吗?您的转换需要大量的数据分组,并且可以在整个记录集上完成。 SSIS在您进行流数据转换时发光,即线范围。

回到你的任务 - 我宁愿做它SSIS和C#脚本任务。 SSIS 执行SQL任务获取结果集并将其存储在Object变量中,然后脚本任务从Object变量中获取数据集并使用LINQ等进行所有转换。然后将结果存储到使用C#的文件中。

+0

谢谢,我想知道如果我忽略了一个简单的方法来使用SSIS。数据实际上更复杂,与转换相同,我也想过用sql做游标,但我认为最简单的方法是将SSIS中的C#用于C#。 – Raistlin

+0

VB.Net脚本任务也是可行的 –

相关问题