约束检查

时间:2012-10-16 16:04:32

标签: sql constraints

我们正在尝试创建一个约束来决定成绩是否应为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语句的最后一个“=”处。请告诉我是否需要添加更多信息,如果不清楚则抱歉。

任何暗示都会受到赞赏。

1 个答案:

答案 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') )