26

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

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

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

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

詳細レポート:

Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptPublishException:オブジェクトのスクリプト中にエラーが発生しました。---> Microsoft.SqlServer.Management.Smo.SmoException:循環依存関係が見つかりました。Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary 2 dictionary, List1sortedList、HashSet 1 visited, HashSet1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary 2 dictionary, List1sortedList、HashSet 1 visited, HashSet1 current) .SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary 2 dictionary, List1sortedList、HashSet 1 visited, HashSet1 current)at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num、Dictionary2 dictionary, ListMicrosoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDictionary(Dictionary 1 objectList、Dictionary 1 objectList、List 1 urns)のsortedList 1、HashSet 1 visited, HashSet1 current)Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable2 dictionary) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(List2 idDictionary, DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.ExecuteQueryUsingTempTable(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(IEnumerable1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List1 urns、ISmoS​​criptWriterライター)at Microsoft.SqlServer.Management.Smo.ScriptMaker.Script(Urn [] urns、ISmoS​​criptWriterライター)at Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptGenerator.DoScript(ScriptOutputOptions outputOptions)---内部例外の終了スタックトレース---Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender、DoWorkEventArgs e)at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object arguments)

4

3 に答える 3

37

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

于 2014-11-14T07:29:28.143 に答える
9

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

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

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

于 2013-07-25T02:59:13.853 に答える
5

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

于 2014-11-13T15:00:12.290 に答える