1

我正在使用 SSIS (SQL Server 2008 R2) 将输入 CSV 文件转换为 SQL 表。输入文件中的五列(实数 - 例如 19.54271)有时会出现错误值(字符串 - 例如“NAN”),这会导致包失败。

检查这 5 列是否存在错误值“NAN”、将其转换为 NULL 值或已知错误数字 (-9999) 并将更正后的值写入同一个最终 SQL 表的最简单方法是什么?

到目前为止我有以下混乱,最后决定问是否有更简单的方法......

在此处输入图像描述

我目前的条件逻辑:
在此处输入图像描述

我的 Case1 派生列转换:
在此处输入图像描述

注意:仍然不确定我是否可以将其他派生列合并到一个实例中,但由于我的目的地只能有一个输入,我怀疑我需要...

TIA

4

2 回答 2

2

当逻辑复杂或有多个评估时,SSIS 表达式会变得复杂且难以阅读。在您的情况下,您将完成一堆任务,这些任务单独完成的很少。

我会将它捆绑到一个脚本组件中。这样,您可以使用基本的 vb 或 c# 函数来评估您的所有列是否都正确转换为数字并在没有时分配默认值。此外,您可以实现 try/catch 场景并将错误优雅地发送到不同的输出缓冲区。

下面是一些如何将脚本组件用作转换的示例:

http://www.bimonkey.com/2009/09/the-script-transformation-part-1-a-simple-transformation/

http://www.sqlis.com/sqlis/post/The-Script-Component-as-a-Transformation.aspx

http://www.codeproject.com/Articles/193855/An-indespensible-SSIS-transformation-component-Scr

于 2012-07-17T00:18:23.300 回答
1

如果我的逻辑比简单地将坏值转换为空值更复杂,那么使用脚本组件似乎是最好的方法。

但是,转换对象的逻辑相当简单,所以希望这可以帮助其他人:

包(请注意,我为数据源中的可疑列重定向行):
SSIS 包

条件拆分逻辑:[编辑:我发现每个案例条件都需要单独的处理路径。如果您正在评估多个表达式,您可以在一种情况下通过在它们后面附加 || 来完成。操作员。] 案例条件逻辑

派生列逻辑: 派生列逻辑

于 2012-07-20T21:15:26.420 回答