我有一个将行从一个数据库移动到另一个数据库的过程。由于一些循环外键引用链,我无法从旧数据库中删除行,也无法将它们插入新数据库中。
由于整个操作发生在事务中1,我希望 SQL Server 忽略引用完整性故障,直到我调用 COMMIT TRANSACTION
。
例如2:
Table: Turboencabulators Table: Marselvanes
========================= =======================
PK TurboencabulatorID int /-> PK MarselvaneID int
^ MarselvanesID int --/ HasGrammeter bit
| PantametricFan varchar(50)
+------------------------------- TurboencabulatorID int
如果我尝试在新表中插入turboencabulator,则在marselvane不存在的情况下,它将失败。颠倒顺序也有同样的问题。
当尝试删除旧行时,在删除另一行之前我无法删除其中一行。
我尝试过使用n阶段系统,其中插入所有行,并将外键约束下的任何列设置为null。然后我更新所有插入的行,放置正确的缺失值。然后,为了删除源行,我将受 FK 影响的所有列清空,然后删除实际行。3
我真正更喜欢的是只执行我的 T-SQL 操作,并且让 SQL Server 在我尝试调用提交之前不会告诉我。
注释
1分布式
2人为的假设
3我不再这样做了
最佳答案
你可以使用...
ALTER TABLE whatever_table NOCHECK CONSTRAINT ALL
在开始之前删除约束检查
完成后将其重新打开...
ALTER TABLE whatever_table CHECK CONSTRAINT ALL
无论如何,这就是我会做的。
-不
关于sql-server - SQL Server : How to ignore referential integrity until COMMIT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345100/