Tat*_*tti 2 sql sql-server-2017
我是 SQL Server 的新手,我收到此错误“无法将 NULL 值插入列 'Occupied',表 'DBProjectHamlet.dbo.tblGrave';列不允许空值。插入失败。语句已终止。”
这是我的插入代码,然后是创建表的代码
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
)
Run Code Online (Sandbox Code Playgroud)
我不想在 Occupied 列中插入任何内容,我不知道为什么会发生这种情况或如何解决它。我只想将值插入到 tblGrave (GraveName) 中。任何帮助都会很棒。
确切地!你没有做任何事情,Occupied这就是问题所在。该列被指定为NOT NULL但没有默认值。您没有插入值,因此它获得默认值。默认默认值为NULL,这是不允许的。
一种简单的解决方案是:
INSERT INTO tblGrave (GraveName, Occupied)
SELECT Grave, 0
FROM tblPlotsandOccupants;
Run Code Online (Sandbox Code Playgroud)
这可以解决您当前的问题,但是您会在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
);
Run Code Online (Sandbox Code Playgroud)