'grade'と呼んだ列に対して次の制約を記述しました。
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
gradeRule
後で異なる値を持つように更新することは可能ですか?たとえば、「中程度」と「難しい」を「中」と「難しい」に変更できます。
ありがとう
'grade'と呼んだ列に対して次の制約を記述しました。
CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),
gradeRule
後で異なる値を持つように更新することは可能ですか?たとえば、「中程度」と「難しい」を「中」と「難しい」に変更できます。
ありがとう
既存の制約を削除し、NOCHECKオプションを使用して新しい制約を追加できます。これにより、テーブル内のデータが制約に違反している場合でも、制約を追加できます。ただし、これを行う場合の問題は、最初に制約を通過させないと、既存のレコードを更新できないことです。
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
GO
ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
GO
これは可能ですが、データの将来の更新で問題が発生する可能性があるため、通常はお勧めしません。
制約を削除してから、置換制約を追加します。少なくともSQLServerで制約を更新することはできません。
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
さらに、新しい制約を満たすように、新しい制約を追加する前にテーブルデータを更新する必要があります。
制約を変更する場合、現在テーブルにあるすべてのデータが制約を満たす必要があります。したがって、「moderate」のデータが2行あり、制約をeasy、medium、hardに変更しようとすると、許可されません。
したがって、新しい制約(簡単、中程度、中程度、難しい、難しい)を作成するか、データを新しい値(中程度->中程度など)に更新する必要があります。