Обход циклических ошибок внешнего ключа при попытке создания сценариев вставки данных в SQL 2008
Я пытаюсь создать некоторые скрипты вставки с помощью мастера SQL Server 2008 Script. После генерации скриптов я получаю следующую ошибку:
"Выбранная база данных содержит внешние ключи, которые создают цикл. Только данные публикации не поддерживаются для баз данных с циклическими отношениями внешних ключей.
Я попытался отключить и удалить все ограничения в базе данных. Ошибка все еще происходит. Есть ли способ обойти это? Возможно, SQL игнорирует ограничения при создании сценариев.
Ответы
Ответ 1
На странице мастера, где вы выбираете переключатель, чтобы выбрать "Все объекты базы данных или конкретные объекты", обязательно выберите "Все объекты базы данных". По какой-то причине инструмент нуждается в чем-то там, чтобы генерировать, даже если вам просто нужна вставка таблицы script.
Как только я изменил этот переключатель на "Все объекты базы данных" и выбрал опцию "Дополнительно" для генерации "Тип" script= Только данные, он проработал весь путь.
Ответ 2
У меня была та же проблема, что и у OP. Затем я снова попробовал, на этот раз в расширенных параметрах, для опции "типы данных до script" я выбрал "схему и данные", а не только данные. Затем он работал у меня, не жалуясь на циклические ключи.
Ответ 3
У меня была такая же проблема, и сегодня я обнаружил, что вы можете использовать SQL Server Management Studio 2012 для базы данных 2008 R2, и вы не получите ошибку:
Sql Server Scripting Data Only: обходной путь для CyclicalForeignKeyException?
Ответ 4
Сохранение файла в зависимости от нового окна редактора запросов, похоже, заставляет меня работать на Management Studio 2008:\
Ответ 5
Во-первых, ответ IMHO HLGEM немного кавалерист - порой есть веские причины иметь циклические ссылки.
Я сказал, что генератор script является гиперчувствительным. Кажется, что любая пара PK/FK "циклична", и мне пришлось использовать копию моей базы данных, из которой я бы разделил все ключи, чтобы получить экспорт, чтобы выйти за пределы "циклической" ошибки. A script, как показано ниже, может помочь вам сбросить ключи по всему миру, но, конечно, будьте осторожны!
SELECT
'ALTER TABLE' + object_name (parent_obj) + 'DROP CONSTRAINT' + [name]
AS Script
из sysobjects, где xtype IN ('F')
[Я этого не писал. См. Http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=46682]
Кроме того, инструмент выглядит бесполезным с точки зрения обратной связи, поскольку в его отчете недостаточно подробных сведений, чтобы сузить область предполагаемых циклических ссылок.
Наконец, я обнаружил, что инструмент выглядит довольно хрупким, так что я получаю случайные таймауты. Еще одно замечание, которое я не исследовал широко, я считаю, что инструмент может потребовать, чтобы вы начали с нуля после циклической ошибки, чтобы очистить его, поскольку я вижу другое поведение, когда я использую кнопку "Предыдущий" против начала обновления.
Ответ 6
Вы можете экспортировать данные, установив опцию script - "Script Проверить ограничения" на False
Извините, это не сработает: (
Вам нужно будет определить, какая таблица вызывает проблему.
Ответ 7
Я получал ту же ошибку, потому что у меня не было таблицы, выбранной в списке объектов (одна большая таблица, которую я хотел создать в другом script). Выбор всех таблиц позволил решить проблему.
PD: Может быть, немного поздно, но поиск CyclicalForeignKeyException становится первым в Google.