看起来,在一个平面文件中,提供了 2 个表格数据。从图像上看,两张表也有不同的数据结构。我认为,很难一步加载文件。
也许,这些步骤会帮助你。
步骤 1. 将所有数据加载到一个表中(让到一个名为 [Table] 的表)。包括column headers.Data 的负载可能看起来像这样(只是一个模式作为示例。)
确保在此表中添加一个增量列
第 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])。它的值应该是这样的,用它你应该能够识别表。
第 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