sql-server - SQL Server : How to ignore referential integrity until COMMIT?

标签 sql-server sql-server-2000 foreign-keys data-integrity

我有一个将行从一个数据库移动到另一个数据库的过程。由于一些循环外键引用链,我无法从旧数据库中删除行,也无法将它们插入新数据库中。

由于整个操作发生在事务中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/

相关文章:

按 PK 列排序时 SQL 查询变慢

sql - 定义一个函数并在 SQL 查询中使用它

html - 如何在 SQL+HTML 脚本生成的电子邮件中左对齐列条目

SQL Server : How to use Cursor to delete records

SQL 查询为列中的每个唯一值返回一条记录

php - 在 MySQL 中创建外键

MySQL 正向工程师 - SQL 给出错误 121

sql - SELECT 查询造成永久损坏?

sql-server - SQL Server 2000 删除带有约束的列

python - 如何在 Django 1.5 中使用 'User' 作为外键