2010-01-15 95 views

回答

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 

與子表將自動更新。

0

對不起,您必須。沒有選擇。

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?

+0

這是否也允許IDENTITY列值被更改? – Codesleuth 2010-01-15 16:21:45

+0

這可能有點複雜。您可以檢查身份相關信息:http://www.mssqltips.com/tip.asp?tip=1397 – 2010-01-15 17:03:29

2

This link介紹如何暫時禁用一個約束。我沒有測試過它。

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

您需要注意,使用此方法時,如果您重新打開約束,數據庫將執行數據完整性檢查。如果出現錯誤,您的數據可能會失敗,修復它可能會產生問題。這也在這裏解釋:http://stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporarily-disabled-using-tsql/159064#159064。 – 2010-01-15 16:44:08

+0

是的,這是真的,但這似乎是一個簡單的情況,OP只需要將每個值更新10000,所以這應該不成問題。似乎唯一的答案是不會有這個問題會改變外鍵爲'ON UPDATE CASCADE',這將改變外鍵而不是僅僅禁用它(這可能是正常的)。 – rosscj2533 2010-01-15 16:52:39