1

本周我正在学习如何为 ETL 系统开发 SSIS 包。我的首要目标之一是发现将平面文件导入数据库的不同方法。由于这在大多数情况下非常简单,因此我一直在使用包含各种数据的不同平面文件。

我今天遇到的一个问题是一个 Excel 文档,其中包含第一行中的数据、第二行中的标题信息和最后几行中的脚信息。我要导入数据库的是页眉和通向页脚的所有行。我不想要第一行,也不想要页脚。

我目前的解决方案是在高级设置和 OpenRowSet 中使用“Sheet1$A2:I20000”创建一个数据流任务。这允许我打开我想要的工作表,选择第二行(我的标题所在的位置),然后选择 A2 和 I20000 之间的所有其他行。

在此处输入图像描述

此解决方案还允许我读取标题信息(我想要的)以及随后的所有行以进行导入。不幸的是,这也选择了页脚行,并且似乎没有针对良好的性能进行优化,因为无论这些行中是否有数据,程序包都必须扫描大量行。

下面的屏幕截图包含我尝试基于 MS SQL 示例数据库导入的 Excel 工作表。我要删除或忽略的行是带有红色框的圆圈。其他没有圈出的都是我要导入的。

关于如何忽略第一行、读取第二行以获取标题信息、读取数据集标题后面的行然后忽略我认为是页脚的最后几行的任何想法?

关于此文件的附加信息

  • 第一行永远不会改变。
  • 标题行永远不会改变。
  • 标头之后的数据集将更改值,而不是数据类型。
  • 页脚的第一列永远不会改变。
  • 页脚的第二列将更改值,而不是数据类型。
  • 其余的页脚栏永远不会改变。
4

1 回答 1

1

我想出了解决我自己问题的方法。

我使用了图中所示的条件拆分来过滤掉我不需要的行。例如,我设置了一个条件来检查数据的第一列 (member_no) 是否 <(小于)一个数字。如果为 TRUE,它将转到我的 OLE DB。如果为假,则无处可去。这阻止了“SUM TOTAL”被传递到数据库。

我还使用“Sheet1$A2:I”而不是“Sheet1$A2:I20000”编辑了我的起始范围。这样,包就会扫描,直到没有要扫描的记录并停止(我假设)。

于 2013-08-05T18:18:13.897 回答