SQL Server에서 외래 키를 어떻게 삭제합니까?


201

다음과 같이 외래 키를 만들었습니다 (SQL Server에서).

alter table company add CountryID varchar(3);
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country;

그런 다음이 쿼리를 실행하십시오.

alter table company drop column CountryID;

이 오류가 발생합니다.

메시지 5074, 수준 16, 상태 4, 줄 2
'Company_CountryID_FK'개체는 'CountryID'열에 종속됩니다.
메시지 4922, 수준 16, 상태 9, 줄 2
ALTER TABLE DROP COLUMN 하나 이상의 개체가이 열에 액세스하여 CountryID가 실패했습니다.

나는 이것을 시도했지만 작동하지 않는 것 같습니다 :

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID;

CountryID기둥 을 떨어 뜨리려면 어떻게해야 합니까?

감사.


2
외래 키를 삭제하려고하면 어떤 오류가 발생합니까?
ddc0660

2
외래 키 제약 조건이 왜 존재하는지 모르면서 외래 키 제약 조건을 삭제하는 것은 위험하다는 점에 유의하십시오. 방금 이것을 만들어 실수로 한 경우 다른 답변에 제공된 코드를 사용하십시오. 그렇지 않은 경우 다른 방법으로 문제가 발생하지 않을 때까지 구속 조건을 삭제하지 마십시오. 제약 조건은 업무 규칙을 적용하기 위해 만들어지며 더 이상 규칙을 삭제하기 전에 더 이상 필요하지 않은 것이 좋습니다.
HLGEM


FK를 삭제하는 구문에는 "외부 키"라는 단어가 필요하지 않습니다. 이것은 SQL Server가 아닌 MySQL의 구문입니다. "제약"이라는 단어로 바꿀 수 있습니다.
John Gilmer

답변:


313

시험

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

48

이것은 작동합니다 :

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]

23

나는 이것이 당신에게 도움이 될 것이라고 생각합니다 ...

DECLARE @ConstraintName nvarchar(200)
SELECT 
    @ConstraintName = KCU.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
    AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
    AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
WHERE
    KCU.TABLE_NAME = 'TABLE_NAME' AND
    KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME'
IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop  CONSTRAINT ' + @ConstraintName)

특정 테이블과 열을 기준으로 외래 키 제약 조건을 삭제합니다.


2
감사합니다 사미르. 훌륭한 일반화.
kuklei

19

구속 조건이 있는지 먼저 확인한 후 삭제하십시오.

if exists (select 1 from sys.objects where name = 'Company_CountryID_FK' and type='F')
begin
alter table company drop constraint  Company_CountryID_FK
end

11
alter table company drop constraint Company_CountryID_FK

4

MSSQL을 모르지만 그렇지는 않습니다.

alter table company drop **constraint** Company_CountryID_FK;

1

테이블을 마우스 오른쪽 버튼으로 클릭하고 수정을 선택한 다음 속성으로 이동하여 마우스 오른쪽 버튼으로 클릭하고 기본 키 삭제를 선택할 수도 있습니다.


1

FK 제약 조건이나 열 자체를 삭제하려고합니까?

구속 조건을 삭제하려면

alter table company drop constraint Company_CountryID_FK

구속 조건을 삭제하기 전까지는 열을 삭제할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.