excel 如何在ssis中的目标表中插入列名?

qmelpv7a  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(98)

参考问题

如图所示...我有一个excel表,其中包含32个表一个接一个(我已经采取了2表的形象)可能会增长表计数…但元数据是相同的所有表。表有两列之一是常数(Name)& another one will get change(TPA,TPB..等),但是列位置没有变化。现在的问题是如何保存头部并作为T_type值插入到目标表中?
每个表中的行数不是固定的(所以我们不能引用单元格)。

lyr7nygr

lyr7nygr1#

我理解的问题是

我相信你在Excel中的数据看起来大约

Name | TPA
abc  | x
...

Name | TPB
acz  | p

数据可以被描述为数据块。一个块被定义为以一个起始行为边界,其中的值为Name。该行上的下一个单元格将包含一个应用于所有后续行的值。
在标题行之后,您将需要取出键值对,并将它们和表名一起写入到您的目标中。
meta数据保持一致,只是源数据都被删除了。

解析

这正是我在编写SSIS Excel Source via SSIS时必须克服的问题。我们必须从报告中获取数据提要,而不是从干净的表格数据中获取。使用这种方法,你只需定义等价的ParseSample方法,然后在foreach循环中(ExcelParser的第71行)你放入块逻辑的是从值为“Name”的字段到遇到空行的所有内容。
伪码近似

# enumerate through all my source data
foreach row in source data
    # assign values to local variables
    col0 = row[0]
    col1 = row[1] 

    # Test for end of block
    if col0 == "Name"
        tableName = col1
    else if col0 == string.Empty
        # do nothing
    else
        newRow = dataTable.NewRow()
        newRow[0] = col0
        newRow[1] = tableName
        newRow[2] = col1
        dataTable.Add(newRow)

如果您想简化这件事,您可以在ScriptMain中拥有所有的解析逻辑,并省去所有数据表的废话。
好处是代码更少,坏处是调试脚本是SSIS 2012年之前的魔鬼。在2012年它仍然是拼凑的,但它比之前的什么都没有要好。

相关问题