본문 바로가기

SQL

[mssql] 기존 테이블에 PK키 추가하기

mssql에서 PK를 추가하려면 기존의 PK를 삭제해주고 재생성해줘야한다.
mytable에 PK을 하나 더 추가하려고 PK 추가 구문을 아래와 같이 호출하면,
아래와 같이 이미 기본키가 정의되었다는 에러메세지가 나오면서 실패한다.

ALTER TABLE [dbo].[mytable] ADD  CONSTRAINT [PK_mytable] PRIMARY KEY CLUSTERED 
(
	[otherPKColumn] 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) ON [PRIMARY]
GO
메시지 1779, 수준 16, 상태 0, 줄 9
테이블 'mytable'에 이미 기본 키가 정의되어 있습니다.
메시지 1750, 수준 16, 상태 0, 줄 9
제약 조건을 만들 수 없습니다. 이전 오류를 참조하십시오.

 

때문에 아래 호출을 통해 기본키를 정의한 PK 테이블 이름을 확인한다음, 

sp_helpconstraint [mytable]
constraint_type constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
PRIMARY KEY(clustered)  PK_mytable  (n/a)  (n/a)  (n/a)  (n/a) Seq

Drop문으로 날려주고 재생성해야한다.

ALTER TABLE dbo.mytable DROP CONSTRAINT PK_mytable
ALTER TABLE [dbo].[mytable] ADD  CONSTRAINT [PK_mytable] PRIMARY KEY CLUSTERED 
(
	[Seq] ASC,
	[otherPKColumn] 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) ON [PRIMARY]
GO

'SQL' 카테고리의 다른 글

[mssql] insert into select 사용하기  (0) 2019.03.04
[mssql] id값 인서트하기  (0) 2019.02.12
[mssql] 데이터별 갯수 확인 쿼리  (0) 2019.02.12