无法将值 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 个例子的回答。
我是 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 个例子的回答。