-2

我们正在尝试创建一个约束来决定一个等级是否应该是 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))。

问题:Check 有什么问题,错误出现在 THEN 语句的最后一个“=”处。如果我需要添加更多信息,请告诉我,如果不清楚,抱歉。

任何提示将不胜感激。

4

1 回答 1

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') )
于 2012-10-16T18:12:44.933 回答