gpt4 book ai didi

sql-server - 在数据导入期间,如何将平面文件中的 dd-mmm-yy 值格式化为smalldatetime?

转载 作者:行者123 更新时间:2023-12-02 22:42:05 25 4
gpt4 key购买 nike

我有一个平面文件,它通过现有的 SSIS 包导入到 SQL Server 中。我需要对包进行更改以适应平面文件中的新字段。新字段是日期字段,格式为 dd-mmm-yy(例如 25-AUG-11)。平面文件中的日期字段要么为空(例如空格/空白),要么填充日期。我无法控制平面文件中的日期格式。

我需要将平面文件中的日期字段导入到现有的 SQL Server 表中,目标字段数据类型为smalldatetime。

我建议将日期作为字符串导入到加载表中,然后在从加载表中获取数据时转换为smalldatetime。但是是否有另一种可能的方法来解析日期格式 dd-mmm-yy 以将其直接加载到smalldatetime 字段中,而不必使用从加载表转换为smalldatetime。我不太想如何解析日期格式,特别是月份。欢迎任何建议。

最佳答案

这是一个示例,可以让您了解可以做什么。理想情况下,在 SSIS 包或任何 ETL 作业中,您应该考虑到数据可能并不完全符合您的要求。您需要采取适当的步骤来处理可能时不时弹出的不正确或无效数据。这就是为什么 SSIS 在数据流任务中提供了大量转换任务,您可以利用它们来清理数据。

根据您的情况,您可以使用派生列转换或数据转换转换来实现您的要求。

该示例是在 SSIS 2008 R2 中创建的。它展示了如何读取包含日期的平面文件并将其加载到 SQL 表中。

File

我创建了一个简单的 SQL 表来导入平面文件数据。

Table

在 SSIS 包上,我有一个 SQL 连接管理器和一个平面文件连接管理器。平面文件连接配置如下所示。

Connection

Flat file 1

Flat file 2

Flat file 3

在 SSIS 包上,我将数据流任务放置在“控制流”选项卡上。在数据流任务内部,我有一个平面文件源、派生列转换和一个 OLE DB 目标。由于平面文件源和 OLE DB 目标很简单,因此我将把它们留在这里。派生转换使用表达式 (DT_DBDATE)SmallDate 创建一个新列。请注意,您还可以使用数据转换来执行相同的操作。这个新列 SmallDateTimeValue 应映射到 OLE DB 目标中的数据库列。

Derived column

如果执行此包,它将失败,因为并非文件中的所有值都有效。

Failed

在你的情况下失败的原因是因为无效数据直接插入到表中。在您的情况下,该表将引发异常,导致包失败。在此示例中,包失败,因为派生列转换的默认设置是在出现任何错误时使组件失败。因此,让我们放置一个虚拟转换来重定向错误行。我们将为此目的进行Multicast改造。它不会真正做任何事情。理想情况下,您应该使用 OLE DB 目标或您选择的其他目标组件将错误行重定向到另一个表,以便您可以分析导致错误的数据。

从派生转换中拖动红色箭头并将其连接到多播转换。这将弹出“配置错误输出”对话框。将错误和截断列下的值从失败组件更改为重定向行。这会将任何错误行重定向到多播转换,并且不会进入表中。

Configure Error output

现在,如果我们执行该包,它将成功运行。请注意每个方向显示的行数。

Success

这是进入表中的数据。只有 2 行有效。您可以查看显示文件中数据的第一个屏幕截图,您可以看到只有 2 行有效。

希望这能让您了解在 SSIS 包中实现您的要求。

Table data

关于sql-server - 在数据导入期间,如何将平面文件中的 dd-mmm-yy 值格式化为smalldatetime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7196671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com