我正在尝试使用SQL Server 2008脚本向导生成一些插入脚本。生成脚本后,我收到以下错误:
“所选数据库包含创建循环的外键。对于具有循环外键关系的数据库,不支持仅发布数据。”
我试图禁用并删除数据库中的所有约束。错误仍在发生。有没有办法解决这个问题?可能会在生成脚本时使SQL忽略约束。
答案 0 :(得分:18)
在向导页面上,选择单选按钮以选择所有数据库对象或特定对象,请确保选择所有数据库对象。由于某种原因,即使您只是想要表插入脚本,该工具也需要生成一些内容。
一旦我将该单选按钮更改为所有数据库对象,并选择了高级选项以生成脚本类型=仅数据,它就一直工作。
答案 1 :(得分:11)
我和OP有同样的问题。然后我再次尝试,这次在高级选项中,对于“脚本数据类型”选项,我选择“架构和数据”而不是数据。然后它在没有抱怨周期性密钥的情况下为我工作。
答案 2 :(得分:2)
我遇到了同样的问题,今天我发现您可以针对2008 R2数据库使用SQL Server Management Studio 2012而且您不会收到错误:
Sql Server Scripting Data Only: Workaround for CyclicalForeignKeyException?
答案 3 :(得分:2)
保存到文件与新的查询编辑器窗口似乎使它在Management Studio 2008上适用于我:\
答案 4 :(得分:0)
首先关闭IMHO HLGEM的回应有点讽刺 - 有时候有正当理由有循环引用。
那说我认为脚本生成器是超灵敏的。它似乎认为任何PK / FK对都是“循环”的,我最终不得不使用我的数据库副本,我从中剥离了所有密钥以使导出超出“周期性”错误。像下面这样的脚本可以帮助你全局删除键,但当然要小心!
选择 'ALTER TABLE'+ object_name(parent_obj)+'DROP CONSTRAINT'+ [name] AS脚本 来自sysobjects,其中xtype IN('F')
[我没写这个。见http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=46682]
此外,该工具在反馈方面毫无用处,因为它的报告没有提供足够的细节来缩小所谓的周期性参考文献的位置。
最后,我发现该工具非常不稳定,因为我得到随机超时。我没有进行过广泛研究的另一个观察是我认为该工具可能要求你在周期性错误之后从头开始清除它的缓存,因为当我使用Previous按钮而不是重新开始时我会看到不同的行为。
答案 5 :(得分:0)
您可以通过将脚本选项 - “脚本检查约束”设置为False
来导出数据抱歉这不起作用:(
您必须确定导致问题的表格。
答案 6 :(得分:0)
我得到了同样的错误,因为我没有在对象列表中选择一个表(我想在另一个脚本中创建一个大表)。选择所有表解决了问题。
PD:也许有点晚了,但是搜索CyclicalForeignKeyException会先获得谷歌。