【问题标题】:SSIS - Convert Multiple Column Values To NullSSIS - 将多列值转换为空值
【发布时间】:2012-07-16 22:57:10
【问题描述】:

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

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

到现在搞的这么乱,最后决定问问有没有更简单的方法……

我目前的条件逻辑:

My Case1 派生列转换:

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

TIA

【问题讨论】:

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


    【解决方案1】:

    当逻辑复杂或有多个评估时,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

    【讨论】:

    • 谢谢。我会看看这些。
    【解决方案2】:

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

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

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

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

    派生列逻辑:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多