2008-09-18 5 views
157

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

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

이 오류가 발생합니다.

Msg 5074, Level 16, State 4, Line 2
The object 'Company_CountryID_FK' is dependent on column 'CountryID'.
Msg 4922, Level 16, State 9, Line 2
ALTER TABLE DROP COLUMN CountryID failed because one or more objects access this column

시도했습니다. 이, 아직 작동하지 않는 것 :

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

CountryID 열을 삭제하려면 어떻게해야합니까?

감사합니다.

+2

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

+0

첫 번째 위치에 왜 있는지 알지 못하고 외래 키 제약 조건을 삭제하는 것은 위험합니다. 방금 만든이 코드를 실수로 사용한 경우 다른 답변에 제공된 코드를 사용하십시오. 그렇지 않으면, 그렇게함으로써 다른 것을 깨뜨리지 않을 것이라고 확신 할 때까지 제한 조건을 제거하지 마십시오. 제약 조건은 버스 규칙을 적용하기 위해 만들어졌으며, 더 이상 필요가 없어지는 것이 확실하다. – HLGEM

+0

http://www.w3schools.com/sql/sql_foreignkey.asp – xameeramir

답변

243

내가 MSSQL을 모르는

alter table company drop constraint Company_CountryID_FK 


alter table company drop column CountryID 
4

시도하지만,하지 않을 것입니다 :

alter table company drop **constraint** Company_CountryID_FK; 
10
alter table company drop constraint Company_CountryID_FK 
44

이 작동됩니다

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

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

1

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

alter table company drop constraint Company_CountryID_FK 

당신은 당신이 제약 조건을 삭제 할 때까지 열을 삭제 할 수 없습니다 :

는 제약 조건을 삭제합니다.

15

나는

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) 

그것은 특정 테이블과 열을 기반으로 외래 키 제약 조건을 삭제합니다 ... 당신이 의지가 도움이 생각합니다.

+1

감사합니다. 사미르. 중대한 일반화. – kuklei

13

제약 조건이 있는지 처음 확인한 다음 놓습니다.

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 
관련 문제