当我尝试向我的一个表添加约束时遇到问题。我想检查一个函数,以便状态为真,然后根据它是否为真返回 1 或 0。但是在函数中,我检查列中的值是否为 NULL 并导致错误
ALTER TABLE 语句与 CHECK 约束“chk_StateFinished”冲突。冲突发生在数据库“databaseName”、表“dbo.Participation”中。
函数看起来像这样
CREATE FUNCTION CheckStateFinished(@StudentID varchar(10), @CourseID varchar(10), @CoursePeriod varchar(10),
@SchoolYear int, @State varchar(15)) RETURNS int
AS BEGIN
DECLARE @Grade varchar(1)
SELECT @Grade = Grade FROM Participation WHERE StudentID = @StudentID AND CourseID = @CourseID AND CoursePeriod = @CoursePeriod AND SchoolYear = @SchoolYear
RETURN CASE WHEN @State = 'Avslutad' AND @Grade = 'U' OR @Grade IS NULL THEN 0
ELSE 1
END
END
添加检查约束如下所示:
ALTER TABLE Participation ADD CONSTRAINT chk_StateFinished CHECK (dbo.CheckStateFinished(StudentID, CourseID, CoursePeriod, SchoolYear, _State) = 1)
我应该做什么而不是函数中的 IS NULL 还是应该做其他事情?