2010-05-15 79 views
0

我有一個產品記錄,它有多個「分區」價格,每個商店銷售該產品一個。SSIS如何將單個記錄分成兩個不同的記錄?

ProductID int 
Name  string 
PriceA money 
PriceB money 
PriceC money 

在SQL Server集成服務,我需要在多個記錄拆分此:

ProductID int 
Version string // A, B, or C 
Price  money // PriceA if A, PriceB if B, etc. 

這將是一個數據流中,我假定爲Excel源和OLE DB目標之間的轉換。 (假設OLE DB是MS SQL服務器的良好目標)。

回答

2

使用excel源碼,使用多播將每個值(即PriceA,PriceB,PriceC)分成一個流。在拆分數據流中,使用派生列將字符串類型創建爲第一個數據流中值爲「A」的字符串類型。使用union all將數據流再次合併到一個數據流中,並將PriceA從第一個流映射到稱爲價格的輸出,將第二流程中的價格B映射到價格,並將第三流程中的價格C映射到價格。您現在擁有的數據流的記錄數是您開始時的三倍。

0

如果輸出下設置「SynchronousInputID」爲無,然後調用AddRow()爲每個記錄輸出:

With Output0Buffer 
    .AddRow() 
    .fieldname = "some value" 
End Width 
With Output0Buffer 
    .AddRow() 
    .fieldname = "some value" 
End Width 

,但我仍然不知道如何設置一個值設置爲null。空不起作用,並且System.DBNull是一個類型,而不是一個值。

2

另外兩個建議是正確的,並且可以工作,但已經有一個內置的數據流任務,可以進行這種操作,而無需手動管理多播/聯合或腳本任務。它也可能更易於維護。

此操作通常稱爲unpivot,因爲數據透視表將行變爲列,這會將列變爲行,並且在SSIS工具箱中都有pivotunpivot變換可用。

相關問題