是否禁用和启用SQL Server支持的外键约束?或者是我唯一的选择drop,然后重新create约束?
我有一个大约有500万行的表,它有一个fk约束引用另一个表的主键(也大约有500万行).
我需要从两个表中删除大约75000行.我知道如果我尝试在启用fk约束的情况下执行此操作,则会花费不可接受的时间.
来自Oracle背景我首先想到的是禁用约束,执行删除然后重新启用约束.如果我是超级用户,PostGres似乎让我禁用约束触发器(我不是,但我以拥有/创建对象的用户身份登录),但这似乎不是我想要的.
另一种选择是删除约束,然后恢复它.考虑到桌子的大小,我担心重建约束会花费很长时间.
有什么想法吗?
编辑:在比利的鼓励之后,我尝试在不改变任何限制的情况下进行删除,并且需要超过10分钟.但是,我发现我正在尝试删除的表具有自引用外键...重复(非索引).
最后的更新 - 我删除了自我引用的外键,删除并添加回来.比利是正确的,但不幸的是我不能接受他的评论作为答案!
我需要更新记录的主键,但它也是另外两个表中的外键.我还需要更新的主键也反映在子表中.
这是我的查询和错误:
begin tran
update question set questionparent = 10000, questionid= 10005 where questionid = 11000;Run Code Online (Sandbox Code Playgroud)
Error 9/4/2009 10:04:49 AM 0:00:00.000 SQL Server Database Error: The UPDATE statement conflicted with the REFERENCE constraint "FK_GoalRequirement_Question". The conflict occurred in database "numgmttest", table "dbo.GoalRequirement", column 'QuestionID'. 14 0
我不记得该怎么做这就是为什么我在这里.有帮助吗?
我正在尝试通过导入/导出向导从生产数据库中播种一个空白数据库。如何说服 SQL Server 忽略外键违规?
谢谢
sql ×3
constraints ×2
sql-server ×2
database ×1
foreign-keys ×1
oracle ×1
postgresql ×1
quotes ×1
ssis ×1
t-sql ×1