我们正在尝试创建一个约束来决定成绩是否应为F。如果课程没有完成,那么学生应该达到F级。否则学生应该获得另一个年级。
这是我们的约束
ALTER TABLE Registrerad_på ADD CONSTRAINT chk_avslutadkurs CHECK (CASE WHEN FinishedCourse
= 'No' THEN Grade = 'F')
Grade是一个接受空值的varchar(50)列,FinishedCourse是相同的,除了它不能包含空值,此时它只包含“是”值。表Registrerad_på包含数据(int和varchar(50))。
问题:检查有什么问题,错误出现在THEN语句的最后一个“=”处。请告诉我是否需要添加更多信息,如果不清楚则抱歉。
任何暗示都会受到赞赏。
答案 0 :(得分:2)
你的约束是
ALTER TABLE Registrerad_på
ADD CONSTRAINT chk_avslutadkurs
CHECK (CASE WHEN FinishedCourse = 'No' THEN Grade = 'F')
CASE语句(标准SQL)的框架语法通常是
CASE WHEN ... THEN ... ELSE ... END
所以你至少需要END关键字。
CHECK (CASE WHEN FinishedCourse = 'No' THEN Grade = 'F' END)
但你可能真的需要更像这样的东西。
CHECK (CASE WHEN FinishedCourse = 'No' THEN Grade = 'F'
WHEN FinishedCourse = 'Yes' THEN Grade IN ('A','B','C','D','F')
ELSE Grade = 'Somebody let some bad data into FinishedCourse'
END)
考虑在FinishedCourse上添加另一个约束。
CHECK (FinishedCourse IN ('Yes', 'No') )