Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Добавление Primary key на существующий кластеризованный индекс  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый день, коллеги.

Когда-то давно была создана табличка вида:
create table dbo.PermanentTable(ID int not null, Field1 int not null, Field2 int not null, Field3 int not null)
create unique clustered index IX_Clustered on dbo.PermanentTable(ID)

сейчас появилась необходимость добавить на поле ID ограничение primary key. При выполнении:
alter table dbo.PermanentTable add Primary key(ID)

sql server создает еще один дополнительный индекс. Есть ли возможность добавить PK Ограничение на существующий индекс ? Т.е. добавить PK без пересоздания кластеризованного индекса и без добавления новых лишних индексов...
10 июл 13, 16:48    [14548244]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Primary key на существующий кластеризованный индекс  [new]
iap
Member

Откуда: Москва
Сообщений: 47066
Exproment,

нет, конечно. PK - это тоже, в общем, уникальный индекс на самом деле.
Можно дропнуть старый индекс и создать кластерный PK.

Но встаёт вопрос: а зачем??
10 июл 13, 16:58    [14548335]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Primary key на существующий кластеризованный индекс  [new]
Exproment
Member

Откуда:
Сообщений: 416
iap, Primary key необходим для того чтобы включить Change Tracking на таблицу.

Вообще я бы не стал называть Primary Key индексом. Primary key - это ограничение, для которого создается одноименный индекс. Это ведь разные сущности и я очень надеялся, что можно навесить PK на существующий индекс.

Дропать кластеризованный и создавать новый - это крайне печальное действие :) ибо считай sql server надо саму таблицу переделать на кучу, а еще и все некластеризованные индексы переделать. Убрать из них ссылки на ключ кластеризованного. Если таблица большая, нагруженная и на продакшене... то dba на британский флаг порвут
10 июл 13, 17:05    [14548364]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Primary key на существующий кластеризованный индекс  [new]
Exproment
Member

Откуда:
Сообщений: 416
Exproment
навесить PK на существующий индекс.

немного не правильно так писать. Имелось ввиду навесить primary key под существующий индекс :)
10 июл 13, 17:06    [14548371]     Ответить | Цитировать Сообщить модератору
 Re: Добавление Primary key на существующий кластеризованный индекс  [new]
Exproment
Member

Откуда:
Сообщений: 416
Exproment, ну и в догонку собственно сама ошибка для Change Tracking:
автор
Msg 4997, Level 16, State 1, Line 5
Cannot enable change tracking on table 'PermanentTable'. Change tracking requires a primary key on the table. Create a primary key on the table before enabling change tracking.
10 июл 13, 17:08    [14548381]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить