Ошибка SQL Server: "%" не является ограничением. Не удалось отказаться от ограничения. См. Предыдущие ошибки

Я использую Microsoft SQL Server 2005 и относительно новичок в SQL в целом.

В базе данных "Информация" существует связь между двумя таблицами "Ресурсы" и "Групповые_ресурсы". Ресурсы имеют внешний ключ, "id", в Group_Resources с именем "resource_id". Существует ограничение внешнего ключа, "fk_gr_res_resources", между двумя.

Я зарегистрирован как владелец базы данных и имею полные права на чтение/запись/создание/удаление.

Я хочу удалить ограничение внешнего ключа, поэтому я выполнил следующий запрос:

ALTER TABLE [Information].[group_resources] DROP CONSTRAINT fk_gr_res_resources

и получил следующую ошибку:

'fk_gr_res_resources' не является ограничением. Не удалось отказаться от ограничения. См. Предыдущие ошибки.

Я смущен, потому что это ограничение, и нет орфографических ошибок. Я собираюсь удалить это ненадлежащим образом? Удаляю ли я ограничение из неправильной таблицы? Любые предложения были бы очень благодарны, и, пожалуйста, не плачьте мне: я все-таки новичок в SQL.

Ответы

Ответ 1

Вы получаете эту ошибку:

Msg 3728, Level 16, State 1, Line 1
'fk_gr_res_resources' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.

Поскольку ограничение FK не существует!

Вы уверены, что Information - это правильное имя схемы, а не dbo?

1. Этот SQL докажет, что FK не существует:

SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'

2. К сожалению, я ошибся в своем первоначальном ответе, вот правильный синтаксис для SQL Server:

ALTER TABLE <table_name>
DROP CONSTRAINT <foreignkey_name>

3. Пример для вашей базы данных:

IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
  ALTER TABLE Group_Resources
  DROP CONSTRAINT fk_gr_res_resources
END;

4. Попробуйте запустить это:

IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
  ALTER TABLE Group_Resources
  ADD CONSTRAINT fk_gr_res_resources
  FOREIGN KEY (resource_id)
  REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */
END;

5. Затем попробуйте это и посмотрите, все ли вы получите эту ошибку:

ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources

Другой синтаксис был для MySQL, извините:

ALTER TABLE <table_name>
DROP FOREIGN KEY <foreignkey_name>

Спасибо за исправление меня OMG Ponies!