2008-09-18 20 views
157

Я создал внешний ключ (в SQL Server) с помощью:Как удалить внешний ключ в 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; 

и я получаю эту ошибку:

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 2008-09-18 14:55:39

+0

Просто имейте в виду, что опасно отказаться от ограничения внешнего ключа, не зная, почему он находится на первом месте. Если вы только что создали это и сделали это по ошибке, используйте код, указанный в других ответах. Если нет, то не отбрасывайте ограничение до тех пор, пока не убедитесь, что вы не сломаете что-то еще, сделав это. Ограничения создаются для обеспечения соблюдения правил шины, и лучше убедиться, что они больше не нужны, прежде чем отбрасывать их. – HLGEM 2008-09-18 17:42:07

ответ

243

Попробуйте

alter table company drop constraint Company_CountryID_FK 


alter table company drop column CountryID 
4

Я не знаю, MSSQL, но не было бы:

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

Вы также можете Контекстное на таблице, выберите модификацию, затем перейдите к атрибуту, щелкните по нему правой кнопкой мыши и выберите choo se drop первичный ключ.

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) 

Это удалит ограничение внешнего ключа на основе конкретной таблицы и столбца.

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 
Смежные вопросы