テーブルの 1 つに制約を追加しようとすると、問題が発生しました。状態が true になるように関数をチェックインし、true かどうかに応じて 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
Add Check Constraint は次のようになります。
ALTER TABLE Participation ADD CONSTRAINT chk_StateFinished CHECK (dbo.CheckStateFinished(StudentID, CourseID, CoursePeriod, SchoolYear, _State) = 1)
関数で IS NULL の代わりに何をすべきか、または何か他のことをする必要がありますか?