5

Pomyłkowo utworzyłem klastrowany klucz podstawowy w kolumnie GUID. Istnieje wiele tabel odwołujących się do tej tabeli ze zdefiniowanymi kluczami obcymi. Wielkość stołu nie jest znacząca.Jak przekonwertować klucz główny klastrowany do klastrów bez pomijania odnośników obcych w SQL Server 2005

Chciałbym przekonwertować go z klastrów do nieklastrowego bez ręcznego upuszczania i odtwarzania jakichkolwiek kluczy obcych, a nawet ograniczenia klucza podstawowego.

Czy można to osiągnąć w MS SQL2005 i jak tak?

Czy można to zrobić ONLINE (bez db time), jeśli tak?

Odpowiedz

3

Możesz spróbować najpierw utworzyć unikalny indeks nieklastrowy NC, a następnie upuścić klastrowy PK. FK powinien rozpoznać ten drugi indeks (ale może nie: nigdy go nie wypróbować).

Po uruchomieniu ALTER TABLE, aby usunąć klastrowany PK, użyj opcji ONLINE. Jest on jednak dostępny tylko w wersji Enterprise.

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

Nie można używać ONLINE dla bitu ADD CONSTRAINT.

Zasadniczo, opcje są ograniczone bez blokowania lub tworząc pierwszy innej tabeli i przenoszenie danych przez ...

+2

Chciałabym uzyskać odpowiedź bez słowa „Try” ... – alpav

+0

@alpav: niestety, Prawdopodobnie po prostu zrzucisz, naprawisz, odtworzysz. I spróbuj zapamiętać na następny raz :-) Wypróbuj za pomocą tabeli 200 milionów wierszy: to bolesne ... – gbn

+2

Pliki FK nie rozpoznają innego indeksu. Kiedy próbuję usunąć ograniczenie PK, nawet po utworzeniu innego unikalnego ograniczenia i wyłączeniu ograniczenia klucza obcego za pomocą ALTER TABLE Tabela 2 NOCHECK CONSTRAINT FK_Table2_Table1, to skarży się, że "Ograniczenie" PK_Table1 jest odwoływane przez tabelę "Tabela 2", ograniczenie klucza obcego "FK_Table2_Table1" Działa tylko upuszczanie FK. – alpav

Powiązane problemy