5

GUID 열에서 클러스터 된 기본 키를 실수로 만들었습니다. 정의 된 외래 키가있는 해당 테이블을 참조하는 많은 테이블이 있습니다. 테이블 크기는 중요하지 않습니다.SQL Server 2005에서 참조하는 외래 키를 삭제하지 않고 클러스터 된 기본 키를 클러스터되지 않은 것으로 변환하는 방법

외래 키 또는 기본 키 제약 조건을 수동으로 삭제하고 다시 만들지 않고 클러스터 된 것으로 변환하고 싶습니다.

MS SQL2005에서이를 달성 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

예 (그렇다면 온라인 다운 타임 없음)를 달성 할 수 있습니까?

답변

3

먼저 고유 한 비 클러스터형 NC 인덱스를 만든 다음 클러스터 된 PK를 삭제할 수 있습니다. FK는이 다른 색인을 인식해야합니다 (그러나 시도하지 않을 수도 있음 : 시도하지 않음).

클러스터 된 PK를 삭제하기 위해 ALTER TABLE을 실행하면 ONLINE 옵션을 사용하십시오. 그러나 Enterprise 버전에서만 사용할 수 있습니다.

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

ADD CONSTRAINT 비트에는 ONLINE을 사용할 수 없습니다.

기본적으로 옵션이

+2

... 차단, 또는 먼저 다른 테이블을 만들고 통해 데이터를 이동하지 않고 제한되어 나는 "시도"단어 ... – alpav

+0

@alpav없이 답변을 얻을 수 있으면 좋겠다 : 불행하게도, I 아마 그냥 많이 내리고, 고치고, 재창조해라. 다음 번에 기억해보십시오 :-) 2 억 행 테이블로 시도하십시오. 고통 스럽습니다. – gbn

+2

FK는 다른 색인을 인식하지 못합니다. 다른 고유 제약 조건을 생성하고 ALTER TABLE Table2 NOCHECK CONSTRAINT FK_Table2_Table1을 사용하여 외래 키 제약 조건을 비활성화 한 후에도 PK 제약 조건을 삭제하려고하면 "제약 조건 'PK_Table1'이 'Table2'테이블, 외래 키 제약 조건 'FK_Table2_Table1'에 의해 참조되고 있습니다. FK 만 삭제됩니다. – alpav

관련 문제