SQL SERVER(MSSQL)에서 클러스터드 인덱스에 컬럼 하나를 추가하고자 DROP 후에 다시 만들려고 할 때 안되는 경우가 있습니다. 즉 PK 제약조건이 설정되어 있어서 안되는 경우인데 이럴 경우에 DROP을 하려고 하면 다음과 같은 에러가 뜹니다.
즉 "인덱스 TEST_TABLE.PK__TEST_TABLE에서는 명시적 DROP INDEX를 사용할 수 없습니다. 이 인덱스는 PRIMARY KEY 제약 조건 설정에 사용 중입니다. 라는 에러가 뜹니다.
이럴 땐 다음과 같이 DROP 후에 다시 만들어주면 됩니다.
GO
ALTER TABLE [dbo].[TEST_TABLE] DROP CONSTRAINT [PK__TEST_TABLE]
GO
ALTER TABLE [dbo].[TEST_TABLE] ADD CONSTRAINT [PK__TEST_TABLE] PRIMARY KEY CLUSTERED
(
[COL1] ASC,
[COL2] ASC,
[COL3] ASC,
[COL4] ASC,
[COL5] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
이렇게 다시 만들면 됩니다.
그럼 어떤 경우에 클러스터드 인덱스를 다시 만들까요?
PK가 클러스터드 인덱스로 되어있고 여기에 컬럼을 하나 추가하고 싶을 때 다시 이렇게 다시 만들면 되겠죠?
물론 운영 중이거나 테이블이 클 때는 조심해서 사용해야 합니다.
'Programming > MSSQL' 카테고리의 다른 글
MSSQL에서 탭, 엔터 제거하기(\t \n \r 제거) (0) | 2018.07.19 |
---|---|
MSSQL 백업파일로 DB 복원하기 (0) | 2018.07.17 |
MSSQL 테이블 권한 조회(확인)하고 GRANT 문 만들기 (0) | 2018.06.09 |
MSSQL 랜덤 패스워드 생성하기(난수형태 비밀번호 만들기) (0) | 2018.05.18 |
MSSQL 인덱스 조각화 확인 및 해결책(DBCC SHOWCONTIG, ALTER INDEX REBUILD) (0) | 2018.04.28 |