Можете ли вы заменить или обновить ограничение SQL? - PullRequest
22 голосов
/ 14 мая 2009

Я написал следующее ограничение для столбца, который я назвал «оценка»:

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

Возможно ли позднее обновить gradeRule, чтобы иметь другие значения? Например, «умеренный» и «сложный» можно заменить на «средний» и «жесткий».

Спасибо

Ответы [ 3 ]

26 голосов
/ 14 мая 2009

Вы можете удалить существующее ограничение и добавить новое ограничение с опцией NOCHECK. Это позволит вам добавить ограничение, даже если данные в таблице нарушают это ограничение. Однако проблема заключается в том, что вы не сможете обновить существующие записи, не заставив их сначала пройти ограничение.

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

Хотя это возможно, его обычно не рекомендуется из-за потенциальных проблем с будущими обновлениями данных.

6 голосов
/ 14 мая 2009

Удалите ограничение, а затем добавьте ограничение замены. Вы не можете обновить ограничение в SQL Server по крайней мере.

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

Кроме того, вам необходимо обновить данные таблицы перед добавлением нового ограничения, чтобы оно соответствовало новому ограничению.

5 голосов
/ 14 мая 2009

Если вы измените ограничение, все данные, находящиеся в данный момент в таблице, должны соответствовать ограничению. Поэтому, если у вас есть 2 строки данных с «умеренным» и вы пытаетесь изменить ограничение на «простое», «среднее» и «сложное», это не позволит вам.

Таким образом, вам нужно будет установить новое ограничение (легкое, среднее, среднее, сложное, сложное) или обновить данные до новых значений - среднее -> среднее и т. Д.

...