에러내용
인덱스 indexname 에서는 명시적 DROP INDEX를 사용할 수 없습니다. 이 인덱스는 FRIMARY KEY 제약 조건 설정에 사용 중입니다.
SQL SERVER(MSSQL)에서 클러스터드 인덱스에 컬럼 하나를 추가하고자 DROP 후에 다시 만들려고 할 때 안되는 경우가 있습니다. 즉 PK 제약조건이 설정되어 있어서 안되는 경우인데 이럴 경우에 DROP을 하려고 하면 다음과 같은 에러가 뜹니다.
해결 1
이럴 땐 다음과 같이 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가 클러스터드 인덱스로 되어있고 여기에 컬럼을 하나 추가하고 싶을 때 다시 이렇게 다시 만들면 되겠죠?
물론 운영 중이거나 테이블이 클 때는 조심해서 사용해야 합니다.
출처: https://zetastring.tistory.com/324 [ZETA STRING]
해결2
Drop Index가 아니라 ALTER TABLE을 이용 한다
alter table [dbo.[tb_index] drop constraint [PK_tb_index]