5

Я ошибся, создав кластерный первичный ключ в столбце GUID. Существует множество таблиц, которые ссылаются на эту таблицу с заданными внешними ключами. Размер таблицы не имеет значения.Как преобразовать кластерный первичный ключ в некластеризованный, не отбрасывая ссылки на внешние ключи в SQL Server 2005

Я хотел бы преобразовать его из кластерного в некластерное без ручного удаления и воссоздания любых внешних ключей или даже ограничения первичного ключа.

Можно ли достичь этого в MS SQL2005 и как, если да?

Возможно ли достичь этого ONLINE (без времени db down), если да?

ответ

3

Сначала вы можете попробовать создать уникальный некластеризованный индекс NC, а затем сбросить кластерный ПК. FK должен признать этот другой индекс (но может и не: никогда не пробовал).

Когда вы запускаете ALTER TABLE, чтобы отказаться от кластерного ПК, используйте опцию ONLINE. Однако он доступен только в Enterprise edition.

ALTER TABLE Mytable DROP CONSTRAINT PK_Mytable WITH (ONLINE = ON) 

Вы не можете использовать ONLINE для бит ADD CONSTRAINT.

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

+2

Я хотел бы получить ответ без слова «попробовать» ... – alpav

+0

@alpav: к сожалению, «Вероятно, просто бросьте лот, исправьте, воссоздайте. И попробуйте вспомнить в следующий раз :-) Попробуйте это с 200-миллионной таблицей строк: это больно ... – gbn

+2

FKs не распознают другой индекс. Когда я пытаюсь отбросить ограничение PK даже после создания другого уникального ограничения и отключения ограничения внешнего ключа с помощью ALTER TABLE Table2 NOCHECK CONSTRAINT FK_Table2_Table1, он жалуется, что «ограничение« PK_Table1 »ссылается на таблицу« Таблица2 », ограничение внешнего ключа« FK_Table2_Table1 » Выполняется только отбрасывание FK. – alpav