我正在尝试使用 SQL Server 导入和导出向导将数据从我的生产数据库复制到我的开发数据库,但是当我这样做时失败并出现错误“插入语句与外键约束冲突”我有超过 40 个表FK 约束,是否有一些简单的方法可以解决这个问题,而不必编写删除约束/添加约束脚本?
编辑:我刚刚发现在我正在运行的 SQL Server 的 Web 版中,DTS 不会让您保存包。
小智 38
我在 SQLTeam.com 上得到了这个解决方案:
用:
Run Code Online (Sandbox Code Playgroud)EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'然后导入你的数据
Run Code Online (Sandbox Code Playgroud)EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
使用这种方法,我能够毫无问题地导入所有数据。
小智 8
我从我无法控制的服务器上在我的机器上生成了数据库的精确副本。
我是个笨蛋,但这就是我所做的:
从我在源代码管理中的脚本创建数据库(提示,提示!)如果您没有脚本,您始终可以通过Tasks选项从现有数据库生成它。
如果任何数据在创建时自动插入到YourDB中,请运行DELETE FROM YourDB.dbo.tblYourTable.
DELETE.在目标服务器上运行: USE YourDB; EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all';
右键单击YourDB在Object Explorer。点击Tasks->Import Data...
向导的前几个屏幕是不言自明的。
在Select Source Table and Views向导屏幕上,单击要复制的每个表旁边的复选框。
对于该屏幕上的每一行(表格),单击它使其突出显示,然后单击Edit Mappings。
对于每一行(表格),单击/检查Append rows to the destination table和Enable identity insert。
Delete rows in destination table它会失败,因为它没有发出DELETE命令,它发出的TRUNCATE命令仍然与我们的外键冲突,因为TRUNCATE它不受之前的约束NOCHECK CONSTRAINT。单击向导的其余部分,然后单击Finish。
注意错误;警告可能可以忽略。
Report按钮并查看报告。尝试和苏斯什么是Success,Error和Stopped。您可能需要修复该报告中某处隐藏的错误根本原因。然后,您可能需要执行DELETE FROM YourDB.dbo.theErrorTable. 现在单击导入向导上的后退按钮并取消选中每个Success. 无限重复。在目标服务器上运行: USE YourDB; EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all';
好极了!:)
感谢在 SE 网络上回答这个问题和类似问题的每个人帮助我解决这个问题。
| 归档时间: |
|
| 查看次数: |
58957 次 |
| 最近记录: |