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

Cannot insert the value NULL into column X, column X does not allow nulls. INSERT fails.

我是 SQL 服务器的新手,我收到此错误 "Cannot insert the value NULL into column 'Occupied', table 'DBProjectHamlet.dbo.tblGrave'; column does not allow nulls. INSERT fails. The statement has been terminated."

这是我的插入代码,后面是创建 table

的代码
INSERT INTO tblGrave (GraveName)
SELECT Grave
FROM tblPlotsandOccupants


IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblGrave' AND TABLE_SCHEMA = 'dbo')
    DROP TABLE dbo.tblGrave;
    GO
CREATE TABLE tblGrave
(
GraveID INT IDENTITY (1,1),
GraveName VARCHAR(MAX) NULL,
GraveTypeID INT NOT NULL,
PlotID INT NOT NULL,
Occupied BIT NOT NULL
)

我并没有尝试在“已占用”列中插入任何内容,我不知道为什么会这样,也不知道如何解决。我只想将值插入到 tblGrave (GraveName) 中。任何帮助都会很棒。

没错!您 没有 使用 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
);

当您创建 table 时,您将该列定义为 "NOT NULL" 而不是允许它为空。

您需要允许 "Occupied" 为空、设置默认值或定义插入时所需的值。

您甚至可以将值设置为“ ”,它是空白但不为空。

编辑

注意@Gordon 对 sql 个例子的回答。