这是一个示例,可以让您了解您可以做什么。理想情况下,在 SSIS 包或任何 ETL 作业中,您应该考虑到数据可能并非您想要的那样。您需要采取适当的步骤来处理可能不时弹出的不正确或无效数据。这就是为什么 SSIS 在数据流任务中提出了许多转换任务,您可以利用这些任务来清理数据。
在您的情况下,您可以利用Derived Column
转换或Data conversion
转换来实现您的要求。
该示例创建于SSIS 2008 R2
. 它展示了如何读取包含日期的平面文件并加载到 SQL 表中。
我创建了一个简单的 SQL 表来导入平面文件数据。
在 SSIS 包上,我有一个连接到 SQL 的连接管理器和一个用于平面文件的连接管理器。平面文件连接配置如下所示。
在 SSIS 包上,我在控制流选项卡上放置了一个数据流任务。在数据流任务内部,我有一个平面文件源、派生列转换和一个 OLE DB 目标。由于平面文件源和 OLE DB 目标很简单,我将把它们放在这里。派生转换使用表达式创建一个新列(DT_DBDATE)SmallDate
。请注意,您也可以使用数据转换转换来执行相同的操作。此新列 SmallDateTimeValue 应映射到 OLE DB 目标中的数据库列。
如果你执行这个包,它会失败,因为不是文件中的所有值都是有效的。
在您的情况下它失败的原因是因为无效数据被直接插入到表中。在您的情况下,该表将引发异常,使包失败。在此示例中,包失败是因为派生列转换的默认设置是在出现任何错误时使组件失败。因此,让我们放置一个虚拟转换来重定向错误行。我们将为此目的进行组播转换。它真的不会做任何事情。理想情况下,您应该使用 OLE DB 目标或您选择的其他目标组件将错误行重定向到另一个表,以便您可以分析导致错误的数据。
从派生转换中拖动红色箭头并将其连接到多播转换。这将弹出配置错误输出对话框。将错误和截断列下的值从失败组件更改为Redirect row
。这会将任何错误行重定向到多播转换,并且不会进入表中。
现在,如果我们执行该包,它将成功运行。注意每个方向显示的行数。
这是进入表格的数据。只有 2 行有效。您可以查看显示文件中数据的第一个屏幕截图,您可以看到只有 2 行有效。
希望这能让您了解在 SSIS 包中实现您的要求。