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

У меня есть база данных SQL Server, для которой я хочу создавать сценарии данных из одной таблицы. Когда я пытаюсь это сделать, я получаю CyclicalForeignKeyException - предположительно, потому что где-то есть цикл FK, и это нормально. Это кажется раздражающим ограничением SQL Server, и в моем случае я использую SQL Server 2008 R2.

3 предложения, которые я прочитал для этого:

  1. Избавьтесь от циклов. (Не вариант, так как я не хочу изменять эту БД.)
  2. Временно удалите ключи, а затем сбросьте их. (Не вариант по той же причине.)
  3. Скриптируйте все объекты в БД. (Это было бы возможно, но эта БД большая, поэтому это не идеальное решение.)

Еще одно подобное предложение, которое я прочитал, заключалось в том, чтобы сделать резервную копию БД и восстановить временную копию, удалить FK, а затем получить данные. Но опять же, поскольку БД большая, это тоже не идеально.

У кого-нибудь есть другая идея?


person TTT    schedule 21.02.2013    source источник
comment
Вы также можете изменить действие на NO ACTION.   -  person Kermit    schedule 22.02.2013
comment
@AarolamaBluenk - будет ли это внесение изменений в БД (неприемлемо в моем случае) или просто для запуска скрипта (приемлемо)?   -  person TTT    schedule 22.02.2013
comment
Это будет внесение изменений в базу данных. Можно ли использовать временную таблицу?   -  person Kermit    schedule 22.02.2013
comment
Я мог бы использовать временную таблицу. Как создать инструкции INSERT для временной таблицы? Обратите внимание, что кажется, что инструмент сценариев имеет циклическое исключение независимо от того, имеет ли таблица, для которой я хочу записывать данные, какие-либо циклы или нет. Я думаю, что он обнаруживает одну БД в ширину и просто сдается.   -  person TTT    schedule 22.02.2013


Ответы (1)


Вау, не могу поверить, что это сработало...

У меня есть аналогичная версия БД, для которой я пытался получить данные на другой машине. На этот раз, когда я запустил инструмент, он сработал. (Под инструментом я имею в виду: Задачи->Создать сценарии... выберите 1 таблицу, в расширенном режиме измените «Типы данных для сценария» на «Только данные».)

Сначала я подумал, что в этой другой версии БД не должно быть циклических ключей, но потом я понял, что использую SQL Server Management Studio 2012 Express. Затем я закрыл SSMS, выполнил runas /netonly с пользователем домена, открыл SSMS 2012 и подключился к базе данных SQL Server 2008 R2. Я повторил попытку сгенерировать скрипт, и он сработал!

Судя по всему, SSMS 2012 исправила эту «проблему», и вы даже можете использовать ее против других версий БД!

person TTT    schedule 21.02.2013