Как изменить ограничение первичного ключа с помощью синтаксиса SQL?
У меня есть таблица, в которой отсутствует столбец в его основном ключевом ограничении. Вместо того, чтобы редактировать его через SQL Server, я хочу поместить его в script, чтобы добавить его как часть наших скриптов обновлений.
Какой синтаксис я могу использовать для этого? Должен ли я отбрасывать и воссоздавать ограничение ключа?
Ответы
Ответ 1
Да. Единственный способ - сбросить ограничение с помощью таблицы Alter, а затем воссоздать его.
ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>
ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)
Ответ 2
PRIMARY KEY CONSTRAINT
не может быть изменен, вы можете удалить его и снова создать. Для больших наборов данных это может привести к длительному времени работы и, следовательно, недоступности таблицы.
Ответ 3
Производительность разумна, нет смысла удерживать некластеризованные индексы во время этого, так как они будут обновляться при удалении и создании.
Если это большой набор данных, вам следует переименовать таблицу (если возможно, какие-либо параметры безопасности на ней?), Повторно создавая пустую таблицу с правильными ключами, перенося все данные там.
Вы должны убедиться, что у вас достаточно места для этого.
Ответ 4
Ответ @darnir можно упростить, используя:
ALTER TABLE <Table_Name> DROP PRIMARY KEY, ADD PRIMARY KEY(<Column1>, <Column2>)
Ответ 5
В моем случае я хочу добавить столбец к первичному ключу (column4). Я использовал этот скрипт для добавления column4
ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]
ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
[column1] ASC,
[column2] ASC,
[column3] ASC,
[column4] ASC
)
Ответ 6
вы можете переименовать объекты ограничений с помощью sp_rename (как описано в этот ответ)
например:
EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'