-2

グレードを F にするかどうかを決定する制約を作成しようとしています。コースが終了していない場合、学生はグレード F を取得する必要があります。それ以外の場合、学生は別のグレードを取得する必要があります。

これが私たちの制約です

ALTER TABLE Registrerad_på ADD CONSTRAINT chk_avslutadkurs CHECK (CASE WHEN FinishedCourse 
= 'No' THEN Grade = 'F')

Grade は null 値を受け入れる varchar(50) 列であり、FinishedCourse は同じですが、null 値を含めることができず、現時点では「はい」の値のみが含まれています。テーブル 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 に答える