Як я можу змінити обмеження первинного ключа за допомогою синтаксису SQL?


100

У мене є таблиця, у якій відсутній стовпець у своєму первинному обмеженні ключа. Замість редагування через SQL Server, я хочу помістити це в сценарій, щоб додати його як частину наших скриптів оновлення.

Який синтаксис я можу використовувати для цього? Повинен я скинути і відтворити ключове обмеження?


5
AFAIK так, вам потрібно скинути і відтворити обмеження ПК. Я не пригадую жодної команди для додавання стовпця до вже існуючого обмеження PK / FK.
Серамме

Відповіді:


149

Так. Єдиний спосіб - скинути обмеження на таблицю Alter, а потім відтворити її.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

11
Якщо ви не знаєте імені обмеження для первинного ключа, скористайтеся запитом, знайденим тут, щоб переглянути його (або шукати вгору та опускати все відразу). http://stackoverflow.com/a/13948609/945875
Джастін

якщо не було зрозуміло, чи хтось зробив ту саму помилку, ім'я обмеження не може входити в лапки alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187 , працює тут
Маслоу

1
Для тих із вас, хто не знає назви обмеження: ALTER TABLE db. table ДРОП ПЕРВИЧНИЙ КЛЮЧ, ДОДАТИ ПЕРШИЙ КЛЮЧ ( id1, id2);
карстен314159

21

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


3

Ефективність не має сенсу зберігати некластеризовані індекси під час цього, оскільки вони будуть оновлені під час падіння та створення. Якщо це великий набір даних, слід розглянути питання про перейменування таблиці (якщо можливо, будь-які параметри безпеки на ній?), Повторно створивши порожню таблицю з правильними клавішами, перенести всі дані туди. Ви повинні переконатися, що у вас є достатньо місця для цього.


3

У моєму випадку я хочу додати стовпчик до первинного ключа (колонка4). Я використовував цей сценарій для додавання колонки4

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

ви можете перейменовувати об'єкти обмеження за допомогою sp_rename (як описано в цій відповіді )

наприклад:

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

3
Питання полягало в тому, як змінити обмеження, тобто додавати стовпчик, а не як перейменувати.
Ендрю Штайц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.