SSIS - 将多列值转换为空

时间:2012-07-16 22:57:11

标签: sql-server sql-server-2008 ssis

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

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

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

enter image description here

我目前的条件逻辑:
enter image description here

我的案例1派生列转换:
enter image description here

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

TIA

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

条件分裂逻辑: [编辑:我发现每个案例条件都需要一个单独的处理路径。如果要评估多个表达式,可以在一种情况下通过将它们附加到||来实现运营商。] Case Condition Logic

派生列逻辑: derived column logic