Как мне удалить внешний ключ в SQL Server? - PullRequest
185 голосов
/ 18 сентября 2008

Я создал внешний ключ (в 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?

Спасибо.

Ответы [ 8 ]

286 голосов
/ 18 сентября 2008

Попробуйте

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID
45 голосов
/ 18 сентября 2008

Это будет работать:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]
20 голосов
/ 31 декабря 2013

Я думаю, это поможет вам ...

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)

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

18 голосов
/ 14 июня 2014

Сначала проверьте наличие ограничения, затем отбросьте его.

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
10 голосов
/ 18 сентября 2008
alter table company drop constraint Company_CountryID_FK
4 голосов
/ 18 сентября 2008

Я не знаю MSSQL, но не будет ли:

alter table company drop **constraint** Company_CountryID_FK;
1 голос
/ 26 марта 2013

Вы пытаетесь удалить ограничение FK или сам столбец?

Чтобы снять ограничение:

alter table company drop constraint Company_CountryID_FK

Вы не сможете удалить столбец, пока не отмените ограничение.

1 голос
/ 01 июня 2010

Вы также можете щелкнуть правой кнопкой мыши по таблице, выбрать изменить, затем перейти к атрибуту, щелкнуть правой кнопкой мыши по нему и выбрать сбросить первичный ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...