#sql #constraints #sql-server-2016
#sql #ограничения #sql-server-2016
Вопрос:
У меня странная проблема с внешними ключами. Я пытаюсь выполнить следующий запрос:
ALTER TABLE [GroupMember] FOREIGN KEY ([Group]) REFERENCES [Group]([GUID])
Что дает мне следующую ошибку:
Оператор ALTER TABLE конфликтовал с ограничением ВНЕШНЕГО КЛЮЧА «FK__GroupMember__Group__0D25C822». Конфликт произошел в базе данных «x», таблица «dbo.Group», столбец «GUID».
Затем я проверил существующие вещи, которые, как я подтвердил, все в порядке:
- Таблица, на которую ссылается (dbo.Group), имеет определенный ПЕРВИЧНЫЙ КЛЮЧ в столбце [GUID]
- Таблица ссылок (dbo.GroupMember) не имеет [Group]-значений, которые не существуют в [GUID]-столбце dbo.Group-table
- Подобных ссылающихся внешних ключей уже не существует
С этого момента я экспериментировал. Ввод и удаление некоторых строк, очистка таблицы, усечение таблицы. Что я могу сделать до сих пор:
- Если я удалю таблицу ссылок с помощью
DELETE FROM [GroupMember];
, а затем попытаюсь применить ограничение FK, я получу то же сообщение об ошибке - Если я усекаю таблицу ссылок с помощью
TRUNCATE TABLE [GroupMember];
, я могу применить ограничение FK без ошибок. Кроме того, я могу без проблем повторно вставить точно такие же данные после применения ограничения FK.
Из этого я могу сделать вывод, что сами данные не являются проблемой. Кто-нибудь может разобраться в этом? Почему я могу применить ограничение после усечения таблицы, но не после удаления всех записей?
Комментарии:
1. Вы пробовали использовать
WITH NOCHECK
опцию сalter table
инструкцией?2. Привет, Тодд. Если я добавлю ограничение с помощью подсказки NOCHECK, это сработает.
3. Допускает ли ваш столбец значения NULL?
4. Привет, Вуозар. Ссылочный столбец имеет значение null, ссылочный столбец является ненулевым столбцом с кластеризованным PK. Я попытался удалить все ссылочные столбцы с NULL, но это не помогает.
Ответ №1:
Если вы используете Microsoft SSMS, проверьте, решает ли проблему снятие флажка «Запретить сохранение изменений, требующих повторного создания таблицы». Вы найдете это в Настройках> Конструкторы> Таблицы и Конструкторы базы данных.
У меня были похожие проблемы, которые были решены этим. Дайте мне знать, работает это или нет.
Удачи.
Комментарии:
1. Привет, и спасибо за ваш ответ. Я также сталкивался с проблемами с этой опцией в прошлом, поэтому она была отключена на некоторое время, я дважды проверил ее сейчас.