无法将值NULL插入到列X中,列X不允许空值。 INSERT失败。

时间:2018-03-20 18:42:46

标签: sql sql-server-2017

我是SQL Server新手,我收到此错误"无法将值NULL插入列' Occupied',table' DBProjectHamlet.dbo.tblGrave&#39 ;;列不允许空值。 INSERT失败。该声明已被终止。"

这是我的插入代码,后跟创建表的代码

public class GenericInput<T>
{
    public T OrderId { get; set; }

    public T CustomerName { get; set; }
}

我没有尝试在列中插入任何内容,我不知道为什么会发生这种情况或如何修复它。我只想在tblGrave(GraveName)中插入值。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

完全!你没有Occupied做任何事情,这就是问题所在。该列指定为NOT NULL但没有默认值。您没有插入值,因此它获得默认值。默认默认值为NULL,不允许使用。

一个简单的解决方案是:

INSERT INTO tblGrave (GraveName, Occupied)
    SELECT Grave, 0
    FROM tblPlotsandOccupants;

这可以解决您的问题,但是您会在PlotId上收到错误。

更强大的解决方案将为NOT NULL列添加默认值,并声明其余值可以为空(默认值)。像这样:

CREATE TABLE tblGrave (
    GraveID INT IDENTITY (1,1) PRIMARY KEY,
    GraveName VARCHAR(MAX),
    GraveTypeID,
    PlotID INT,
    Occupied BIT NOT NULL DEFAULT 0
);

答案 1 :(得分:0)

创建表时,您将该列定义为“NOT NULL”,而不是允许它为空。

您需要允许“Occupied”为null,设置默认值或定义插入时所需的值。

您甚至可以将值设置为'',该值为空但不为空。

编辑

注意@ Gordon对sql示例的回答。