Обход циклических ошибок внешнего ключа при попытке создания сценариев вставки данных в SQL 2008 - PullRequest
11 голосов
/ 24 января 2011

Я пытаюсь сгенерировать некоторые сценарии вставки с помощью мастера сценариев SQL Server 2008. После генерации скриптов я получаю следующую ошибку:

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

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

Ответы [ 7 ]

18 голосов
/ 20 января 2012

На странице мастера, где вы выбираете переключатель, чтобы выбрать Все объекты базы данных или Определенные объекты, обязательно выберите Все объекты базы данных. По какой-то причине инструмент должен что-то генерировать, даже если вам нужен только скрипт вставки таблицы.

Как только я изменил эту кнопку-переключатель на Все объекты базы данных и выбрал опцию Дополнительно, чтобы сгенерировать Тип сценария = Только данные, он работал до конца.

11 голосов
/ 31 октября 2013

У меня была та же проблема, что и у ОП.Затем я попытался снова, на этот раз в дополнительных параметрах, для опции «типы данных для сценария» я выбрал «схему и данные», а не только данные.Тогда это сработало для меня, не жалуясь на циклические ключи.

2 голосов
/ 08 мая 2013

Сохранение в файл по сравнению с новым окном редактора запросов, кажется, заставляет меня работать в Management Studio 2008: \

2 голосов
/ 22 февраля 2013

У меня возникла та же проблема, и сегодня я обнаружил, что вы можете использовать SQL Server Management Studio 2012 для БД 2008 R2, и вы не получите ошибку:

Только данные сценариев сервера SQL: Обходной путь для CyclicalForeignKeyException?

0 голосов
/ 06 августа 2013

Я получаю ту же ошибку, потому что у меня не было таблицы, выбранной в списке объектов (одну большую таблицу, которую я хотел создать в другом скрипте).Выбор всех таблиц решил проблему.

PD: Возможно, немного поздно, но поиск CyclicalForeignKeyException становится первым в Google.

0 голосов
/ 06 апреля 2011

Вы можете экспортировать данные, установив параметр сценария - «Ограничения проверки скрипта» на «Ложь»

Извините, это не сработает: (

Вам нужно будет определить, какая таблица вызывает проблему.

0 голосов
/ 08 февраля 2011

Прежде всего, ответ IMHO HLGEM немного кавалерен - иногда есть веские причины иметь циклические ссылки.

Тем не менее я считаю, что генератор сценариев сверхчувствителен. Кажется, кажется, что любая пара PK / FK является «циклической», и мне пришлось использовать копию моей базы данных, из которой я удалил все ключи, чтобы экспорт вышел за пределы «циклической» ошибки. Сценарий, подобный следующему, может помочь вам сбросить ключи во всем мире, но, конечно, будьте осторожны!

ВЫБРАТЬ «ALTER TABLE» + имя_объекта (parent_obj) + «DROP CONSTRAINT» + [имя] Как скрипт от системных объектов, где xtype IN ('F')

[Я этого не писал. Смотри http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=46682]

Более того, этот инструмент довольно бесполезен с точки зрения обратной связи, поскольку в его отчете недостаточно подробностей, чтобы сузить область предполагаемых циклических ссылок.

Наконец, я обнаружил, что инструмент довольно ненадежен, так как у меня случаются случайные тайм-ауты. Еще одно наблюдение, которое я не исследовал широко, заключается в том, что я думаю, что инструмент может потребовать, чтобы вы начали с нуля после циклической ошибки, чтобы очистить кэш, поскольку при использовании кнопки «Предыдущая» и «запуска заново» * я вижу другое поведение.

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