2014-10-17 140 views
3

我有一個平面文件源的數千條記錄(在某些情況下> 100K)。這個源是外部採購的,我不能請求佈局版本。SSIS平面文件源行重構

在這個平面文件,每行包含四列:

| User ID  | Status_1 | Status_2 | Status_3 
| 1337  | Green  | Yellow | Red 
| 1234  | Red  | Red  | Green 

目標表的目的是要接受兩列:

| User ID  | Status Codes 
| 1337  | Green 
| 1337  | Yellow 
| 1337  | Red 
| 1234  | Red 
| 1234  | Red 
| 1234  | Green 

到現在爲止,我已經運行3個不同的SSIS包到我的目的地表格,平面文件中的每個狀態列一個。

我想要的是使用單個SSIS包,並創建另一個平面文件目標或臨時表來鏡像目標表,並從那裏導入。

這是可以實現的嗎?如果是這樣,那麼使用什麼樣的最佳實踐任務,而不是簡單地將UPDATE & SET添加到臨時表中。

+1

Spitballing它在這裏,但將一個多播組件到3個不同的OLE DB目標組件,擊中同一個表解決這個問題? – billinkc 2014-10-17 19:42:31

+0

@billinkc你可能是對的。我仍然在學習如何利用這些組件,所以我會試一試。 – Phoenix 2014-10-17 19:46:02

回答

1

heh看起來像一個好ole SQL的情況。我會在這一個上使用一個UNPIVOT。

http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

該鏈接有一個很好的例子,它看起來非常相似,你的數據:

--Create the table and insert values as portrayed in the previous example. 
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int, 
    Emp3 int, Emp4 int, Emp5 int); 
GO 
INSERT INTO pvt VALUES (1,4,3,5,4,4); 
INSERT INTO pvt VALUES (2,4,1,5,5,5); 
INSERT INTO pvt VALUES (3,4,3,5,4,4); 
INSERT INTO pvt VALUES (4,4,2,5,5,4); 
INSERT INTO pvt VALUES (5,5,1,5,5,5); 
GO 
--Unpivot the table. 
SELECT VendorID, Employee, Orders 
FROM 
    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5 
    FROM pvt) p 
UNPIVOT 
    (Orders FOR Employee IN 
     (Emp1, Emp2, Emp3, Emp4, Emp5) 
)AS unpvt; 
GO 

返回時,我是數據倉庫,一半我的工作看起來就像是用在垃圾數據我UNPIVOT通過電子表格。

+0

是的,這正是我所需要的。非常感謝! :) – Phoenix 2014-10-17 19:56:27