web-dev-qa-db-ja.com

スクリプトの生成-データのみ-循環依存関係がエラーを検出しました

データベース内のすべてのデータのスクリプトを生成しようとしているので、データだけを別のサーバー上の同じデータベースに移動できます。 SQL Server 2012では、ソースデータベースを右クリックします

タスク>スクリプトの生成>データベース全体とすべてのデータベースオブジェクトのスクリプト化>詳細>スクリプト化するデータの種類:データのみ

これにより、循環依存についてエラーが発生します。スクリプトのデータ型をスキーマANDデータに変更すると、正常に生成されます。データのみで機能するようにこれを修正するにはどうすればよいですか?

アクション結果MyDatabaseからのオブジェクトのリストの取得に失敗しました

詳細レポート:

Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptPublishException:オブジェクトのスクリプト作成中にエラーが発生しました。 ---> Microsoft.SqlServer.Management.Smo.SmoException:循環依存関係が見つかりました。 Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary _2 dictionary, List_ 1sortedList、HashSet _1 visited, HashSet_ 1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary _2 dictionary, List_1sortedList、HashSet _1 visited, HashSet_ 1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary _2 dictionary, List_ 1sortedList、HashSet _1 visited, HashSet_ 1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer .DependencyGraphTraversal(Int32 num、Dictionary _2 dictionary, List_ 1sortedList、HashSet _1 visited, HashSet_ 1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDictionary(Dictionary2 dictionary) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(List 1 objectList、Dictionary2 idDictionary, DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.ExecuteQueryUsingTempTable(List 1 objectList 、List1 list, String query) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.ResolveTableOnlyDependencies() at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.ResolveDependencies() at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.Order(IEnumerable 1 urns)at Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List 1 urns、ISmoS​​criptWriter writer)at Microsoft.SqlServer.Management.Sm o.ScriptMaker.Script(Urn [] urns、ISmoS​​criptWriter writer)at Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptGenerator.DoScript(ScriptOutputOptions outputOptions)---内部例外スタックトレースの終了--- Microsoft.SqlServer.Management.SqlScriptPublish .GeneratePublishPage.worker_DoWork(オブジェクト送信者、DoWorkEventArgs e)at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)at System.ComponentModel.BackgroundWorker.WorkerThreadStart(オブジェクト引数)

25
parliament

これとまったく同じエラーが発生しました...ここで私の答えを参照してください: http://mattslay.com/ssms-generate-scripts-data-only-cyclic-dependencies-found-error/

次に、気まぐれに、以前にこのデータベースのスクリプトを正常に作成したことがあることを知って、SQL Server Management 2008R2を使用してSQLServer 2012インスタンスに接続し、エラーなしでスクリプトを生成できました。

データのみを実行し、すべてのデータベースオブジェクトをスクリプト化できるようにする必要があることに注意してください。特定のテーブルのみを選択しようとしましたが、それによって追跡したくない他のエラーが発生したため、すべてを実行しました。

9
MattSlay

私のために働いた可能な解決策の1つは、「データのみ」ではなく「スキーマとデータ」としてスクリプトを生成することです。次に、不要なスキーマのものをすべて削除し、データのみを残すことができます。それもお役に立てば幸いです。

32
Azat

私も同じ問題を抱えていましたが、マットが提案したことを実行するためのSSMS 2008R2がインストールされていません。そこで、詳細設定を変更してスキーマとデータを作成し、オブジェクトがすでに存在するかどうかを確認するように設定しました。他のほとんどのもの(つまり、主キー、一意キーなど)をfalseに設定して、SQLファイルにあるのは基本的なcreatetableステートメントとinsertステートメントだけになるようにします。テーブルを作成する前にテーブルがまだ存在していないかどうかをチェックしているので、テーブルがすでに存在している場合はスクリプトを実行しても問題ありません。したがって、挿入ステートメントの場合と同じように動作します。選択した複数のテーブルに対して単一のSQLファイルを作成する場合、すべてのテーブル作成ブロックがスクリプトの先頭に配置されるため、必要に応じて、ファイルの作成後にすべてのブロックを簡単に削除できます。

5
Kevin Heidt