【问题标题】:How to handle NULLs/Blanks in SSIS如何处理 SSIS 中的 NULL/空白
【发布时间】:2018-06-04 07:14:23
【问题描述】:

我正在构建一个 SSIS 包以将平面文件 (CSV) 加载到 SQL Server。

当我尝试将列state_code (char(2)) 插入到 SQL 服务器时,出现以下错误。如果我将目标数据类型更改为 Char(4),则包将成功执行。

我怀疑这是由于 CSV 中的“NULL”而造成的问题。该包将 NULL 作为 4 个字符并尝试插入 Destination(Char(2))。我搜索了很多。但是我在任何地方都没有发现任何类似的情况。

[平面文件源 [2]] 错误:数据转换失败。列“Column_1”的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。

【问题讨论】:

  • 在 CSV 文件中,如果单元格中包含单词“NULL”,则其值为 4 个字符的字符串“NULL”。空白单元格将被解释​​为值NULL。 "NULL" 和NULL 不一样。
  • 您可以使用derived column task。放置在您的来源和目的地之间。使用它将字符串 null 替换为 null 值。
  • 补充@Larnu 所说的,通常是当您从Excel 中保存时造成的,因为Excel 倾向于用文本"NULL" 替换实际的NULL 字段
  • 谢谢大家,你能告诉我在派生列转换中执行此操作的表达式
  • 嘿,雅各布。那是一个 CSV 文件。供您参考文件类型:Microsoft Excel 逗号分隔值文件 (.csv

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


【解决方案1】:

只需使用以下表达式添加派生列转换,即可将 "NULL" 字符串替换为 NULL 值:

UPPER([Column]) == "NULL" ? NULL(DT_WSTR,2) : [Column]

或者你可以用空字符串替换它

UPPER([Column]) == "NULL" ? "" : [Column]

更新 1

根据您的 cmets 我发布了此更新

NULL() 函数将数据类型作为参数,因此如果您使用日期列,您可以使用NULL(DT_DATE) Read more

对于日期列,您可以使用以下表达式:

UPPER([Column]) == "NULL" ? NULL(DT_DATE) : [Column]

对于整数列,您可以使用以下表达式:

UPPER([Column]) == "NULL" ? NULL(DT_I4) : [Column]

【讨论】:

【解决方案2】:

当您将数据从数据库导出到平面文件时,您无法处理数据类型 INT 的空值。请参阅此链接,其中哪些数据类型处理空值:Microsoft SQL Docs: NULL (SSIS Expression)

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多