Вы не можете вставить значение NULL в столбец 'sdept', таблица 'XSGL.dbo.student'; столбец не допускает пустых значений. INSERT не удалось - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблемы на SQL сервере. У меня есть база данных с именем XSGL для управления информацией об учениках.

Сначала я создаю представление с именем IS_Student на таблице учеников .

enter image description here

CREATE VIEW IS_Student
AS SELECT sno, sname, ssex, sage
FROM student
WHERE sdept = 'IS'
WITH CHECK OPTION;

Затем я хочу вставить студента по представлению.

INSERT INTO IS_Student 
VALUES('200215129', '赵新', '男', 20) ;

Но есть ошибка:

Msg 515, Level 16, State 2, Line 1
不能将值 NULL 插入列 'sdept',表 'XSGL.dbo.student';列不允许有 Null 值。INSERT 失败。
语句已终止。

Я перевожу это на английский sh.

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', и я также создаю его с WITH CHECK OPTION. Почему ошибка говорит о том, что я не могу вставить значение NULL в столбец 'sdept'.

Извините за мой бедный Endli sh. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Условие является частью представления, но для базовой таблицы выполняется 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
0 голосов
/ 22 апреля 2020

sdebt не является частью вашего представления, и это не обнуляемый столбец в вашей базовой таблице. Поскольку это не является частью вашего взгляда или вашего оператора INSERT, он попытается вставить в него значение NULL, что приведет к сбою.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...