尝试在SQL 2008中生成插入数据脚本时解决周期性外键错误

Moe*_*Moe 11 sql scripting sql-server-2008

我试图使用SQL Server 2008脚本向导生成一些插入脚本.生成脚本后,我收到以下错误:

"所选数据库包含创建循环的外键.仅具有循环外键关系的数据库不支持发布数据."

我试图禁用并删除数据库中的所有约束.错误仍在发生.有没有办法解决这个问题?可能会在生成脚本时使SQL忽略约束.

小智 18

在向导页面上,选择单选按钮以选择所有数据库对象或特定对象,请确保选择所有数据库对象.由于某种原因,即使您只是想要表插入脚本,该工具也需要在其中生成一些内容.

一旦我将该单选按钮更改为所有数据库对象,并选择了高级选项以生成脚本类型=仅数据,它就一直工作.


Joh*_*mer 12

我和OP有同样的问题.然后我再次尝试,这次在高级选项中,对于"脚本数据类型"选项,我选择"架构和数据"而不是数据.然后它没有抱怨周期性键,对我有用.


小智 0

首先,恕我直言,HLGEM 的回应有点漫不经心——有时有充分的理由需要循环引用。

也就是说,我认为脚本生成器非常敏感。似乎认为任何 PK/FK 对都是“循环”的,我最终不得不使用数据库的副本,从中删除所有密钥以使导出超出“循环”错误。像下面这样的脚本可以帮助您全局删除密钥,但当然要小心!

SELECT 'ALTER TABLE' + object_name(parent_obj) + ' DROP CONSTRAINT ' + [name] AS Script from sysobjects where xtype IN ('F')

【这不是我写的。请参阅http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=46682]

此外,该工具在反馈方面几乎没有用处,因为它的报告没有提供足够的细节来缩小所谓的周期性参考存在的范围。

最后,我发现该工具非常不稳定,因为我会遇到随机超时。我尚未广泛研究的另一项观察结果是,我认为该工具可能要求您在出现循环错误后从头开始以清除其缓存,因为当我使用“上一个”按钮与重新启动时,我看到不同的行为。