SQL 구문을 사용하여 기본 키 제약 조건을 어떻게 변경할 수 있습니까?


100

기본 키 제약 조건에 열이없는 테이블이 있습니다. SQL Server를 통해 편집하는 대신 스크립트에 넣어 업데이트 스크립트의 일부로 추가하고 싶습니다.

이를 위해 어떤 구문을 사용할 수 있습니까? 키 제약 조건을 삭제하고 다시 만들어야합니까?


5
AFAIK 예, PK 제약 조건을 삭제하고 다시 만들어야합니다. 이미 존재하는 PK / FK 제약 조건에 열을 추가하라는 명령이 기억 나지 않습니다.
Seramme

답변:


149

예. 유일한 방법은 Alter 테이블을 사용하여 제약 조건을 삭제 한 다음 다시 만드는 것입니다.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
기본 키 제약 조건 이름을 모르는 경우 여기에있는 쿼리를 사용하여 조회하거나 한 번에 조회 및 삭제합니다. http://stackoverflow.com/a/13948609/945875
Justin

이 취소되지 않았거나 다른 사람이 같은 실수를하는 경우, 따옴표로 갈 수없는 제한 조건 이름이 alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187여기에 노력하고 있습니다
매스로 우는

1
제약 이름을 모르는 사람들을 위해 : ALTER TABLE db. table DROP PRIMARY KEY, ADD PRIMARY KEY ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINT변경할 수 없으며 드롭하고 다시 만들 수 있습니다. 큰 데이터 세트의 경우 실행 시간이 길어 테이블을 사용할 수 없습니다.


3

성능면에서는 삭제 및 생성시 다시 업데이트되므로 클러스터되지 않은 인덱스를 유지할 필요가 없습니다. 빅 데이터 세트 인 경우 테이블 이름을 바꾸고 (가능한 경우 보안 설정이 있습니까?) 올바른 키가있는 빈 테이블을 다시 생성하면 모든 데이터가 마이그레이션됩니다. 이를 위해 충분한 공간이 있는지 확인해야합니다.


3

제 경우에는 기본 키 (4 열)에 열을 추가하고 싶습니다. 이 스크립트를 사용하여 column4를 추가했습니다.

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

sp_rename을 사용하여 제약 개체의 이름을 바꿀 수 있습니다 ( 이 답변에 설명되어 있음 )

예를 들면 :

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

3
문제는 제약 조건을 변경하는 방법, 즉 이름을 바꾸는 방법이 아니라 열을 추가하는 방법이었습니다.
Andrew Steitz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.