2014-10-17 98 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