SSIS中的平面文件源

时间:2014-09-05 04:45:32

标签: ssis business-intelligence file-format flat-file data-conversion

enter image description here

在我的平面文件源中,我想在OLDEDB中传输所有这些数据。 但我想将数据分成不同的表格。

实施例。
表1从第一个%F开始,在col [0]中的另一个%F之前结束 并且表2在第二个%F中以不同的头开始,因为它具有与第一个表不同的字段。

这在SSIS中是否可行?

1 个答案:

答案 0 :(得分:0)

看起来,在单个平面文件中,提供了2个表数据。从图像看起来,两个表也有不同的数据结构。我认为,很难一步加载文件。

可能是,这个步骤会帮助你。

步骤1.将所有数据加载到表中(转到名为[Table]的表)。加载包括column headers。数据可能看起来像这样(只是一个模式作为示例。) 在此表中,请确保添加增量列

enter image description here

步骤2.如下所示的查询将帮助您确定第二个表从哪一行开始。

Select Top 1 Column0 From [Table] Where Column1 = '%F' Order By Column0 Desc

在你的ssis包中,添加一个变量来存储上面的结果

步骤3.添加源为[Table].的dft在源添加条件分割后。

If Column0 < variable value, sent row to [Table1]
else to [Table2]

可能还有一些修改。


根据评论添加:

如果您有超过1张桌子。

第1步。将所有数据加载到一个表中。

第2步。添加一个附加列(图像中的[columnX])。它的价值应该是这样的,你应该能够识别表格。

enter image description here

第3步。使用条件拆分本身,使用columnX将每一行映射到其对应的表。


根据要求,添加了编辑: 使用这样的逻辑。在SSMS中运行脚本并查看结果。

Declare @table table (id int identity(1,1),Col1 varchar(5), ColX int)
Insert into @table (Col1) Values
('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'),
('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'),
('%F'),('%R'),('%R'),('%R'),('%R')

Select  *
from    @table A

Update  Y
Set     ColX = Z.X
From    @table Y Join(
Select  A.id FromId,B.id ToId,A.X  From 
(
Select id,ROW_NUMBER() Over (Order By id) X From (
Select id from @table Where Col1 = '%F'
Union
Select max(id) id From @table ) Lu ) A,
(
Select id,ROW_NUMBER() Over (Order By id) X From (
Select id from @table Where Col1 = '%F'
Union
Select max(id) id From @table ) Lu ) B
Where A.X = B.X - 1 ) Z On Y.id >= Z.FromId and Y.id < Z.ToId
Select  *
from    @table A

Select  *
from    @table A