2

我正在创建 SSIS 包以导入大型固定宽度文本文档,并且需要转换各种字段。一个这样的字段代表日期并且是 8 个字符宽。格式为“yyyyMMdd”,如下所示:

SomeDateField
20130415
20110122
19891023

但是,有些字段只有空格,有些字段会全为零 00000000。不能转换为日期的字段应返回 NULL 值。我不能替换像 1/1/1900 这样的日期。

在徒劳地尝试将其转换为带有表达式的日期字段后,我转向了 C# Script Transformation。

我的输入列称为 sSoldDate 并且是只读的。我已经配置了一个名为 SoldDate 的 DT-DBDATE 数据类型的输出。

我想出的代码是:

DateTime varDate;
        bool isParsed;

        isParsed = DateTime.TryParseExact(Row.sSoldDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out varDate);
        if (isParsed)
        {
            Row.SoldDate = varDate;
        }
        else
        {
            Row.SoldDate_IsNull = true;
        }

然后,我通过在同一脚本组件中重复该代码并替换其他字段名称来跟进文本导入中的其他日期字段,例如这个字段。但是,我不必重复变量声明。

尽管这可行,但我将不得不重复这个过程很多,并想确保这是执行这种检查和转换的最方便的方法。有没有更简洁的方法来实现同样的目标?

有没有更高效的方法?

是否有一些简单的方法可以将逻辑封装在自定义方法或函数中,从而使这个过程更容易?

4

1 回答 1

1

大卫,

我过去做过的一件事是使用您反复使用的代码创建(或让某人为您创建)一个 .NET 程序集。您应该能够在您编写的任何脚本中引用此程序集。

我已将它用于 SQL Server 2008\2008 R2 BIDS。我还没有尝试过 2012 BIDS。如果您需要更多信息,请告诉我。我可能会为此写一篇博客。

于 2013-04-21T16:53:33.240 回答