Sql server 不能将值NULL插入列';sdept&x27;,表格';XSGL.dbo.student';;该列不允许空值。插入失败
我在SQL Server上遇到了一些问题。 我有一个名为Sql server 不能将值NULL插入列';sdept&x27;,表格';XSGL.dbo.student';;该列不允许空值。插入失败,sql-server,management-studio-express,Sql Server,Management Studio Express,我在SQL Server上遇到了一些问题。 我有一个名为XSGL的数据库来管理学生信息 首先,我在表Student上创建了一个名为IS_Student的视图 然后我想在视图中插入一个学生 INSERT INTO IS_Student VALUES('200215129', '赵新', '男', 20) ; 但它有一个错误: Msg 515, Level 16, State 2, Line 1 不能将值 NULL 插入列 'sdept',表 'XSGL.dbo.student';列不允许有
XSGL
的数据库来管理学生信息
首先,我在表Student上创建了一个名为IS_Student
的视图
然后我想在视图中插入一个学生
INSERT INTO IS_Student
VALUES('200215129', '赵新', '男', 20) ;
但它有一个错误:
Msg 515, Level 16, State 2, Line 1
不能将值 NULL 插入列 'sdept',表 'XSGL.dbo.student';列不允许有 Null 值。INSERT 失败。
语句已终止。
我把它翻译成英语
You cannot insert the value NULL into the column 'sdept', the table 'XSGL.dbo.student'; the column does not allow Null values. INSERT failed.
The statement has been terminated.
视图IS_Student
是在其sdept
为'IS'
的学生上创建的,我还使用带有复选选项的创建它。为什么错误告诉我不能将值NULL插入列'sdept'
为我可怜的Endlish道歉。提前感谢。sdebt不是视图的一部分,它是基础表中不可为空的列。
由于它不是视图或INSERT语句的一部分,它将尝试向其中插入NULL,这将使它失败。sdebt不是视图的一部分,并且它是基础表中不可为NULL的列。
由于它不是视图或INSERT语句的一部分,它将尝试向其中插入NULL,这将使它失败。该条件是视图的一部分,但在基础表上执行INSERT
您需要在视图上创建一个Insert触发器,该触发器处理视图条件的默认值:
CREATE TRIGGER TR_Ins_IS_Student
ON dbo.IS_Student
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO dbo.Student (sno, sname, ssex, sage, sdept)
SELECT sno, sname, ssex, sage, 'IS'
FROM inserted
END
该条件是视图的一部分,但在基础表上执行insert
您需要在视图上创建一个Insert触发器,该触发器处理视图条件的默认值:
CREATE TRIGGER TR_Ins_IS_Student
ON dbo.IS_Student
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO dbo.Student (sno, sname, ssex, sage, sdept)
SELECT sno, sname, ssex, sage, 'IS'
FROM inserted
END
我知道我只有4个值,但视图IS_Student
是针对sdept
为'IS'
的学生创建的。因此,当我插入4个值时,应该将其转换为5个值。第五个值是自动添加的。我编辑了我的答案。“自动添加”是什么意思?您提供的代码中没有任何内容会自动向不可为空的sdept列添加值。@Cedersved
为什么sdept
不在我的视图中。我不明白。它没有显示在视图中,因为它没有显示在选择中,@guapi上。因此,在视图
上插入一个将代替默认值,或者在没有默认值时插入一个NULL
。为什么要在视图中插入而不是在表中插入?如果出于某种原因需要在视图中插入。您可以在sdebt列上添加默认约束,以便在插入提供NULL时提供定义的值。我知道我只有4个值,但视图IS_Student
是在其sdept
为'IS'
的学生上创建的。因此,当我插入4个值时,应该将其转换为5个值。第五个值是自动添加的。我编辑了我的答案。“自动添加”是什么意思?您提供的代码中没有任何内容会自动向不可为空的sdept列添加值。@Cedersved
为什么sdept
不在我的视图中。我不明白。它没有显示在视图中,因为它没有显示在选择中,@guapi上。因此,在视图
上插入一个将代替默认值,或者在没有默认值时插入一个NULL
。为什么要在视图中插入而不是在表中插入?如果出于某种原因需要在视图中插入。您可以在sdebt列上添加默认约束,以便在inserts提供NULL时提供定义的值。无法执行此命令。有一个错误:消息2112,级别16,状态1,过程TR_Ins_is_Student,第1行[批处理开始行0],因为视图“dbo.is_Student”是使用CHECK选项定义的,因此无法为此视图创建触发器“TR_Ins_is_Student”。
我想您不需要WITH CHECK选项
子句,由于WHERE
条件引用的列不是SELECT
ed,因此无法执行此命令。有一个错误:消息2112,级别16,状态1,过程TR_Ins_is_Student,第1行[批处理开始行0],因为视图“dbo.is_Student”是使用CHECK选项定义的,因此无法为此视图创建触发器“TR_Ins_is_Student”。
我想您不需要WITH CHECK选项
子句,因为WHERE
条件所指的列不是SELECT
ed