Подтвердить что ты не робот

Можете ли вы заменить или обновить ограничение SQL?

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

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

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

Ответ 3

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

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