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, List1 sortedList, HashSet 1 visited, HashSet1 current) 在 Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num, Dictionary 2 dictionary, List1 sortedList, HashSet 1 visited, HashSet1 current) .SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num,Dictionary 2 dictionary, List1 sortedList,HashSet 1 visited, HashSet1 current)在 Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.DependencyGraphTraversal(Int32 num,Dictionary2 dictionary, List1 sortedList, HashSet 1 visited, HashSet1 current) 在 Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDictionary(Dictionary 2 dictionary) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.SortDataSet(List1 objectList, Dictionary 2 idDictionary, DataSet ds) at Microsoft.SqlServer.Management.Smo.SmoDependencyOrderer.ExecuteQueryUsingTempTable(List1 objectList, List 1 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) 在 Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable1 urns) at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List1 urns, ISmoS​​criptWriter writer) at Microsoft.SqlServer.Management.Smo.ScriptMaker.Script(Urn[] urns, ISmoS​​criptWriter writer) at Microsoft.SqlServer.Management.SqlScriptPublish.SqlScriptGenerator.DoScript(ScriptOutputOptions outputOptions) --- 内部异常结束堆栈跟踪 --- 在 Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender, DoWorkEventArgs e) 在 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) 在 System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

4

3 回答 3

37

对我有用的一种可能的解决方案是将脚本生成为“架构和数据”而不是“仅数据”。然后我可以删除所有不必要的模式内容,只留下数据。希望这也有帮助。

于 2014-11-14T07:29:28.143 回答
9

我有同样的错误......在这里查看我的答案:http: //mattslay.com/ssms-generate-scripts-data-only-cyclic-dependencies-found-error/

然后,一时兴起,知道我之前已经成功编写过这个数据库的脚本,我使用 Sql Server Management 2008 R2 连接到 Sql Server 2012 实例,并且能够毫无错误地生成脚本!

请注意,我只做数据,我必须允许它为所有数据库对象编写脚本。我试图只选择某些表,但这给出了一些我不愿意追查的其他错误,所以我只是做了整个事情。

于 2013-07-25T02:59:13.853 回答
5

我遇到了同样的问题,并且没有安装 SSMS 2008 R2 来执行 Matt 建议的操作。所以我所做的是更改高级设置以使其创建架构和数据,并将其设置为检查对象是否已存在。我将大部分其他内容设置为 false(即主键、唯一键等),因此 sql 文件中的所有内容都是基本的创建表语句和插入语句。因为它在创建表之前检查表是否不存在,所以如果表已经存在,您可以运行脚本。所以它的行为就像它只是插入语句一样。如果您要为多个选定的表创建单个 sql 文件,它将所有表创建块放在脚本的顶部,因此如果需要,在创建文件后删除所有这些块很容易。

于 2014-11-13T15:00:12.290 回答