web-dev-qa-db-ja.com

SQL制約を置換または更新できますか?

'grade'と呼んだ列に次の制約を書きました:

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

gradeRuleを後で別の値に更新することはできますか?たとえば、「中」と「難しい」を「中」と「ハード」に変更できます。

ありがとう

24
StormPooper

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

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

これは可能ですが、データの将来の更新に関する潜在的な問題のため、通常はお勧めしません。

27
Scott Ivey

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

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

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

6
Scott Ferguson

制約を変更する場合、現在テーブルにあるすべてのデータが制約を満たす必要があります。したがって、「中」の2行のデータがあり、制約を簡単、中程度、および難しいに変更しようとした場合、それはできません。

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

5
Mark Sherretta