'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
これは可能ですが、データの将来の更新に関する潜在的な問題のため、通常はお勧めしません。
制約を削除してから、置換制約を追加します。少なくともSQL Serverの制約は更新できません。
ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
さらに、新しい制約を満たすように、新しい制約を追加する前にテーブルデータを更新する必要があります。
制約を変更する場合、現在テーブルにあるすべてのデータが制約を満たす必要があります。したがって、「中」の2行のデータがあり、制約を簡単、中程度、および難しいに変更しようとした場合、それはできません。
したがって、新しい制約(簡単、中程度、中程度、困難、難しい)を作成するか、データを新しい値に更新する必要があります-中程度->中程度.