Как я могу изменить ограничение первичного ключа с помощью синтаксиса SQL?


У меня есть таблица, в которой отсутствует столбец в первичный ключ ограничений. Вместо того, чтобы редактировать его через SQL Server, я хочу поместить это в сценарий, чтобы добавить его как часть наших сценариев обновления.

какой синтаксис я могу использовать для этого? Должен ли я удалить и воссоздать ограничение ключа?

4 74

4 ответа:

да. Единственный способ-удалить ограничение с помощью таблицы Alter, а затем воссоздать его.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

PRIMARY KEY CONSTRAINT не может быть изменен, вы можете только отбросить его и создать снова. Для больших наборов данных это может привести к длительному времени выполнения и, следовательно, к недоступности таблицы.

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

вы можете переименовать объекты ограничений с помощью процедуры sp_rename (как описано в ответ)

например:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'