我有一个大约 500 行的 Excel 文件。
Excel 数据源任务读取这些行,SQL 目标任务将 500 行插入目标表中。
如果行号(例如第 400 行)处有一个空白行,即使如此,任务也不会在第 400 行停止并继续执行,直到最后一行(例如第 500 行)。
想知道 ssis excel 数据源任务如何知道在哪一行停止?
我有一个大约 500 行的 Excel 文件。
Excel 数据源任务读取这些行,SQL 目标任务将 500 行插入目标表中。
如果行号(例如第 400 行)处有一个空白行,即使如此,任务也不会在第 400 行停止并继续执行,直到最后一行(例如第 500 行)。
想知道 ssis excel 数据源任务如何知道在哪一行停止?
我不能说它的逻辑是什么,而且我怀疑它是否在任何地方都有记录。
要“查看”Excel 源将消耗什么,假设您选择工作表而不是命名范围。在 Excel 中打开电子表格,按一次 Ctrl-End,Excel 将导航到可能包含数据的最后一个单元格/列。在您的 500 行示例中,它实际上可能会转到第 600 行,因为这些单元格中有数据,或者格式或某些工件,其中数据不再存在,但某些不可见标记仍在工作表上。突出显示第 500-600 行并选择“删除”会将数据标记的末尾重置为第 500 行。
如果您发现 Excel 文件源正在读取超出“末尾”的许多空白行,我会通过识别定义有效数据行的内容来处理该问题(ID 列已填充、SSN、SalesDate、定义最小集合的某些内容)数据)。
添加派生列:这将是布尔类型、DT_BOOL,我使用类似or等
IsInvalidRow
的表达式,但是您可以确定无效行是什么。ISNULL(MyCol)
ISNULL(MyCol) || MyCol==""
添加条件拆分并使用条件
IsInvalidRow
并将这些行路由到空。将默认路径连接到数据流的其余部分。为什么要添加额外的列?
调试/维护/支持。如果无效行将到达您的目的地,并且您在条件拆分中拥有所有逻辑,则您无法查看表达式的计算结果。通过将其分成显式列,您可以对其进行调试(通常通过将非常复杂的表达式分解为较小的表达式并比较输出)。