【问题标题】:DB2 Error: Assignment of NULL value to not null column " " is not allowed?DB2 错误:不允许将 NULL 值分配给非空列“”?
【发布时间】:2012-12-11 20:39:51
【问题描述】:

我正在尝试对表格进行插入,但它会引发此错误。但是,它没有向我显示受影响的列。

有人知道这里发生了什么吗?

【问题讨论】:

  • 你能显示代码吗?还有关于表架构的信息?
  • 我猜你没有在插入语句中包含所有列,并且一个/一些缺失的列被定义为非空。建议查看 DB Schema,同时列出 DB Schema 和 insert 语句会很有用
  • 我同意@BruceMartin 关于可能的原因。在 DB2 中可能发生这种情况的一种特定情况:如果您有一个带有自动生成键的表,那么您创建另一个表 LIKE 该表,默认情况下不会将自动生成复制到新表(但NOT NULL 属性是)。因此,插入尝试将 null 分配给您假设正在自动生成的键。
  • 好点 Dan,我已经有一段时间没有使用 DB2了

标签: .net database vb.net insert db2


【解决方案1】:

不知何故,您的应用或 SQL 正在将 <NULL> 发送到指定为 "NOT NULL" 的列。

我刚刚在我正在编写的应用程序中看到了这一点。考虑下表:

CREATE TABLE "PURCHASE" (
  "PURCHASE_NAME"   VARCHAR(150)    NOT NULL,
  "NOTIFY_FLAG" CHARACTER(1)    NOT NULL,
  "PURCHASE_AMOUNT" DECIMAL(9, 2)
)

按以下方式插入会产生你问的错误:

INSERT INTO PURCHASE
(PURCHASE_NAME, NOTIFY_FLAG, PURCHASE_AMOUNT) 
VALUES 
('Lotus Organizer version 3.1', null, 12743.27);

您的屏幕截图显示您的数据库客户端未向您发送列信息。它应该看起来像这样:

ERROR [23502] [IBM][DB2/AIX64] SQL0407N  Assignment of a NULL value to a NOT NULL
column "TBSPACEID=15, TABLEID=11, COLNO=16" is not allowed.

要对此进行调试,您需要以某种方式捕获您的应用正在生成的 SQL,并通过更直接的 DB 客户端运行它,例如 TOAD (http://www.quest.com/database-management/)。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2019-11-25
    相关资源
    最近更新 更多