用于删除或忽略平面文件中多行的SSIS包

时间:2013-08-03 01:55:17

标签: sql-server database ssis

本周我正在学习如何为ETL系统开发SSIS包。我的第一个目标之一是发现将平面文件导入数据库的不同方法。由于这在很大程度上是非常直接的,我一直在使用包含各种数据的不同平面文件。

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

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

enter image description here

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

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

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

关于此文件的添加信息

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

1 个答案:

答案 0 :(得分:1)

我找到了自己问题的解决方案。

我使用了图表中显示的Conditional Split来过滤掉我不需要的行。例如,我提出了一个条件,检查第一列数据(member_no)是否为< (小于)一个数字。如果为TRUE,则转到我的OLE DB。如果错,那就无处可去。这样就无法将“SUM TOTAL”传递给数据库。

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