Я создал внешний ключ (в 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?
Спасибо.
Просто имейте в виду, что отбрасывать ограничение внешнего ключа, не зная, почему оно вообще существует, опасно. Если вы только что создали это и сделали это по ошибке, используйте код, указанный в других ответах. Если нет, то не снимайте ограничение, пока не будете уверены, что этим вы не нарушите что-то еще. Ограничения создаются для обеспечения соблюдения правил занятости, и лучше убедиться, что они больше не нужны, прежде чем удалять их.
Ваш синтаксис для удаления FK не нуждается в словах «внешний ключ». Это синтаксис MySQL, а не SQL Server. Вы можете заменить его словом «ограничение».





Пытаться
alter table company drop constraint Company_CountryID_FK
alter table company drop column CountryID
Это также работает (по крайней мере, в SQL 2016): alter table company drop constraint Company_CountryID_FK, column CountryID
Я не знаю MSSQL, но разве не было бы:
alter table company drop **constraint** Company_CountryID_FK;
alter table company drop constraint Company_CountryID_FK
Это будет работать:
ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]
Вы также можете щелкнуть правой кнопкой мыши по таблице, выбрать «Изменить», затем перейти к атрибуту, щелкнуть его правой кнопкой мыши и выбрать опустить первичный ключ.
Вы пытаетесь отбросить ограничение FK или сам столбец?
Чтобы снять ограничение:
alter table company drop constraint Company_CountryID_FK
Вы не сможете отбросить столбец, пока не сбросите ограничение.
Думаю, вам это поможет ...
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)
Он удалит ограничение внешнего ключа на основе конкретной таблицы и столбца.
Спасибо, Самир. Отличное обобщение.
Сначала проверьте наличие ограничения, затем удалите его.
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
Какую ошибку вы получаете при попытке сбросить внешний ключ?