27

'grade'と呼んだ列に対して次の制約を記述しました。

CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),

gradeRule後で異なる値を持つように更新することは可能ですか?たとえば、「中程度」と「難しい」を「中」と「難しい」に変更できます。

ありがとう

4

3 に答える 3

30

既存の制約を削除し、NOCHECKオプションを使用して新しい制約を追加できます。これにより、テーブル内のデータが制約に違反している場合でも、制約を追加できます。ただし、これを行う場合の問題は、最初に制約を通過させないと、既存のレコードを更新できないことです。

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
GO
ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
GO

これは可能ですが、データの将来の更新で問題が発生する可能性があるため、通常はお勧めしません。

于 2009-05-14T01:31:21.613 に答える
6

制約を削除してから、置換制約を追加します。少なくともSQLServerで制約を更新することはできません。

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

さらに、新しい制約を満たすように、新しい制約を追加する前にテーブルデータを更新する必要があります。

于 2009-05-14T01:20:32.920 に答える
5

制約を変更する場合、現在テーブルにあるすべてのデータが制約を満たす必要があります。したがって、「moderate」のデータが2行あり、制約をeasy、medium、hardに変更しようとすると、許可されません。

したがって、新しい制約(簡単、中程度、中程度、難しい、難しい)を作成するか、データを新しい値(中程度->中程度など)に更新する必要があります。

于 2009-05-14T01:19:32.983 に答える