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

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

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

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

Спасибо


person StormFoo    schedule 14.05.2009    source источник


Ответы (3)


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

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

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

person Scott Ivey    schedule 14.05.2009
comment
Просто для уточнения: вы рекомендуете удалить существующее ограничение, а затем добавить исправленное ограничение без опции NOCHECK, верно? - person onedaywhen; 14.05.2009
comment
Да, как упоминалось в других ответах, я могу отказаться от ограничения, обновить данные, ТОГДА создать новое ограничение. Я бы использовал NOCHECK, если бы хотел добавить ограничение, а затем обновить данные, но это может вызвать проблемы. - person StormFoo; 14.05.2009
comment
Правильный ответ находится на stackoverflow.com/questions/13244889/how-to -alter-constraint -- Нет, вы никогда не сможете изменять ограничения. - person Quigi; 15.01.2016

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

ALTER TABLE SomeTable DROP CONSTRAINT gradeRule

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

person Scott Ferguson    schedule 14.05.2009

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

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

person Mark Sherretta    schedule 14.05.2009
comment
Первоначальный вопрос заключался в том, можно ли изменить ограничение. Ответ Скотта Айви, хотя и не прямой, кажется отрицательным (без игры в кости, надо ОТПАСАТЬ). Ваш, наоборот, кажется утвердительным. Но каким оператором SQL вы изменяете ограничение? - person Quigi; 15.01.2016