작업을 하다 보면 기존 테이블 속성을 ALTER를 사용해 변경할 경우가 있습니다.
자리수를 변경해야 하거나 데이터 타입을 변경해야 하는 등등.
하지만 변경하려는 컬럼이 Primary Key로 지정되어 있는 경우는 변경을 할 수 없습니다.
아래와 같은 에러 메세지가 나옵니다.

ALTER TABLE ALTER COLUMN UserNo failed because one or more objects access this column.
변경하려는 컬럼이 Primary Key로 설정되어 경우 변경하는 방법을 알아보겠습니다.
Primary Key 컬럼 속성 변경 순서
-- index_name 검색
EXEC sp_helpindex 테이블 이름;
-- Primary Key 해제
ALTER TABLE 테이블 이름 DROP CONSTRAINT 인덱스 이름;
-- 컬럼 속성 변경
ALTER TABLE 테이블 이름 ALTER COLUMN 컬럼 이름 VARCHAR(32) NOT NULL;
-- Primary Key 등록
ALTER TABLE 테이블 이름 ADD CONSTRAINT 인덱스 이름 PRIMARY KEY (컬럼 이름);
sp_helpindex로 변경하려는 테이블의 컬럼에 설정된 인덱스 이름을 취득합니다.
취득한 인덱스 이름은 다시 Primary Key 등록에서 사용하니 따로 적어두는 것이 좋습니다.
인덱스 이름으로 Primary Key 설정을 해제합니다.
해제는 ALTER ~ DROP ~ 부분입니다.
ALTER COLUMN을 사용해 컬럼 속성을 변경합니다.
변경이 완료되면 다시 Primary Key 등록을 해줍니다.
Primary Key 컬럼 속성 변경 예제

-- index_name 검색
EXEC sp_helpindex TBL_USER;

-- Primary Key 해제
ALTER TABLE TBL_USER DROP CONSTRAINT TBL_USER_PK;

-- 컬럼 속성 변경
ALTER TABLE TBL_USER ALTER COLUMN UserNo VARCHAR(32) NOT NULL;


-- Primary Key 등록
ALTER TABLE TBL_USER ADD CONSTRAINT TBL_USER_PK PRIMARY KEY (UserNo);


UserNo 컬럼을 변경하기 전에는 VARCHAR(16) 이였습니다.
PK 해제를 하고 ALTER COLUMN으로 VARCHAR(32) 무사히 변경되었습니다.
그리고 변경이 완료되면 ADD CONSTRAINT로 Primary Key 등록을 다시 해주면 됩니다.
댓글