【问题标题】:How to convert blank into null in ssis如何在ssis中将空白转换为null
【发布时间】:2012-10-14 17:32:12
【问题描述】:

我正在从ssis 的excel 中提取数据。 excel 列之一包含blank 值。所以我需要用 null 替换 blank 值,否则我的包会失败。 有什么建议吗?

【问题讨论】:

    标签: sql-server error-handling ssis


    【解决方案1】:

    你有没有尝试过类似的东西(假设数据类型是字符串/varchar):

    LEN(TRIM([ColumnName]))==0 ? NULL(DT_WSTR, 10) : [ColumnName] 
    

    【讨论】:

    • 我已经尝试过了,但它不是字符串,它是日期,我们不能使用 ltrim 作为日期...... :(
    • 这确实有效。尽管数据类型显示为字符串 [DT_STR],但我正在使用 DT_STR 并且失败了。
    【解决方案2】:

    在 DataFlow 中使用 DerivedColumn 组件。

    替换你的列并在表达式中输入这行代码

    ColumnName == "" ? NULL(DT_WSTR,50) : ColumnName

    如果列为空,它将确保返回 null

    【讨论】:

    • 我们可以在没有派生列的情况下使用这个表达式吗?
    • 我们可以在一行中多次替换同一列而不使用另一个 DerivedColumn 或更复杂的公式吗?
    【解决方案3】:

    您可能还想选中在源连接和目标连接上保留 Null 值的选项(如果可用)

    【讨论】:

    • 这不是重点!重点是如何处理或替换 NULL 值。我已经尝试过你的建议,但它不起作用。应该有 Expression 用 NULL 或用户定义的值替换 Empty 值。
    • 好吧,我想你是对的。如果这是一个平面文件,平面文件源上有一个选项可以保留空值。启用此功能以及目标连接(如 OLEDB)上的“保留 NULL 值”选项可能会消除使用派生列转换替换它的需要。
    • 嗯!好吧,我有 Excel 作为来源。 Excel 包含一些空单元格,当我将它们加载到 DB 中时,它给出了 NULL。我曾尝试使用表达式(条件拆分),但它不起作用。我会尽快粘贴我的错误。
    • 如果我们只在数据字段中有“”,这将永远无法工作。
    【解决方案4】:

    我有一个类似的实例,我想将日期列中的字符串替换为 NULL,我使用了以下代码:

    LEN(your_data)

    在这种情况下,字符串的长度只有 1。然后我使用数据转换转换将其转换为 dt_dbtimestamp 类型。

    希望有帮助!

    【讨论】:

      【解决方案5】:

      修复上述问题 :::::

      必须使用允许空值选项检查源和目标,它将起作用。

      【讨论】:

      • 在我的情况下,我使用的是平面文件源,左侧“连接管理器”下的选项是一个复选框“将源中的空值保留为数据流中的空值”跨度>
      【解决方案6】:

      您应该使用派生列组件和条件表达式。由于这是一个条件语句,数据类型需要相同才能创建布尔结果。

      试试这个:

      ColumnName == (DT_DATE)"" ? NULL(DT_DATE) : ColumnName
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 2013-12-31
        相关资源
        最近更新 更多