2016-12-01 79 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腳本任務也是可行的 –

相關問題