禁用SQL Server中的批量更新约束

时间:2010-01-15 16:11:31

标签: sql sql-server tsql foreign-keys

我需要在2个表上更改P​​K / FK(添加10000)的值。我如何告诉所涉及的两个表,他们不应该关心更新期间的参照完整性,而是要关心。如果我不需要,我不想放弃并重建关系。

4 个答案:

答案 0 :(得分:2)

你的FK应该有一个“ON UPDATE CASCADE”选项。

ALTER TABLE child CHANGE myfkconst FOREIGN KEY id REFERENCES parent (id) ON UPDATE CASCADE;

(或类似的东西。不是100%确定语法)

然后你可以做到

UPDATE parent SET id = id + 10000 WHERE id = something

并且子表将自动更新。

答案 1 :(得分:2)

您可能希望通过执行以下命令来禁用数据库中的所有约束:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all";

然后用以下方式重新打开它们:

EXEC sp_msforeachtable @command1="print '?'", 
                       @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all";

来源:Stack Overflow - Can foreign key constraints be temporarily disabled using TSQL?

答案 2 :(得分:2)

This link描述了如何临时禁用约束。我还没有测试过。

-- disable constraint
ALTER TABLE table_name NOCHECK CONSTRAINT constraint_name
-- enable constraint
ALTER TABLE table_name CHECK CONSTRAINT constraint_name

答案 3 :(得分:0)

抱歉,你必须这样做。没有选择。