【问题标题】:SSIS - Cannot insert the value null into columnSSIS - 无法将值 null 插入列
【发布时间】:2012-11-08 19:58:22
【问题描述】:

我以前见过这个错误,但是通过手动输入值来解决它,但那是 4 行,这次这个错误发生在 100 多行。

问题是,这个名为Shipto 的列将包含以下三种内容之一:1 位数字、2 位数字或单词All。导入对于 1 位和 2 位数字非常有效,但是当它有 All 时会导致此错误:

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。这 组件“OLE DB 目标”(162) 上的 ProcessInput 方法失败 处理输入“OLE DB 目标”时出现错误代码 0xC0202009 输入” (175)。已识别的组件从 ProcessInput 方法。该错误是特定于组件的,但 错误是致命的,将导致数据流任务停止运行。 在此之前可能会发布带有更多信息的错误消息 关于失败。

这个包从一个表中获取值并将它们插入到另一个表中。我查看了它将从中获取值的表,shipto 列不为空。

唯一的区别在于两个表的结构。临时表允许该列上的空值,而实际表不允许。两个表的列都是varchar(20)。

我注意到在数据流中有一个复选框,上面写着check constraints;取消选中这个可以解决这个问题吗?因为该列不为空。

感谢您提供的任何帮助,我会发布任何可能需要的其他信息。谢谢。

【问题讨论】:

  • “在此之前可能会发布错误消息,其中包含有关失败的更多信息” 还有其他消息吗?通常有。我见过的大多数问题通常与数据类型不匹配有关。
  • 在您分享的错误消息中,我没有看到它提到的问题是空值。如果目标表不允许空值,取消选中 ETL 包上的检查约束将无法解决问题。您确定源数据中的任何行在该列中都不存在空值吗?
  • @Samuel 没有其他错误。数据类型相同,这就是我对此感到困惑的原因。
  • @STLRick 我现在正在查看表格,并且在 ShipTo 列中没有一行具有 NULL 值。我不明白填充列是如何作为空值传递的。
  • 只是问了个愚蠢的问题,在目的地的映射选项卡中,您是否将源值之一映射到了目标列中以供 Shipto 使用?如果源数据中没有 NULL 值,并且您确信这是一个 NULL 问题,那么这是我能想到的唯一其他事情。

标签: ssis


【解决方案1】:

有几种可能性:

  1. 您的源表中有一个空值。您的目标表不允许该列中有空值。有几个选择。如果您直接使用表中的数据源,请改用 SQL 命令并在查询中处理 null:

    SELECT field1, field2, isnull(shipto, '') field3, field4, .... 从表

    您可以在上面的空字符串中使用任何您想要的内容来将空值替换为更可接受的值。

    如果您不想这样做,则必须在目标数据库中允许空值,或者找出源数据库表中存在空值的原因并确保不再发生。

  2. 字段未映射。您在源中有未映射到目标字段的值。

  3. 源和目标之间的其他转换正在引入 NULL 值。

【讨论】:

  • 感谢您的帮助!我真的很感激。
  • 您能否指出这三个答案中的哪一个对您有用,以便其他人可以从答案中受益?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多