我正在尝试使用 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 次 |
最近记录: |