我需要更改2個表上PK/FK(添加10000)的值。我如何告訴涉及到的兩個表格,他們不應該在更新期間關心參照完整性,而是關心後續處理。如果我不需要,我不想丟棄和重新創建關係。在SQL Server中批量更新時禁用約束條件
回答
你的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
與子表將自動更新。
對不起,您必須。沒有選擇。
您可能需要通過執行以下命令來關閉數據庫中的所有約束:
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?
This link介紹如何暫時禁用一個約束。我沒有測試過它。
-- disable constraint
ALTER TABLE table_name NOCHECK CONSTRAINT constraint_name
-- enable constraint
ALTER TABLE table_name CHECK CONSTRAINT constraint_name
您需要注意,使用此方法時,如果您重新打開約束,數據庫將執行數據完整性檢查。如果出現錯誤,您的數據可能會失敗,修復它可能會產生問題。這也在這裏解釋:http://stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporarily-disabled-using-tsql/159064#159064。 – 2010-01-15 16:44:08
是的,這是真的,但這似乎是一個簡單的情況,OP只需要將每個值更新10000,所以這應該不成問題。似乎唯一的答案是不會有這個問題會改變外鍵爲'ON UPDATE CASCADE',這將改變外鍵而不是僅僅禁用它(這可能是正常的)。 – rosscj2533 2010-01-15 16:52:39
- 1. SQL Server 2012約束條件
- 2. SQL Server條件CHECK約束條件
- 3. SQL Server中的條件約束
- 4. 在Xcode Storyboard中禁用約束條件
- 5. 批量更新SQL Server C#
- 6. 在sql server中執行批量更新
- 7. 在SQL Server中暫時禁用空約束
- 8. SQL Server有條件的外鍵約束
- 9. SQL SERVER FK和約束條件
- 10. SQL Server 2008-獲取表約束條件
- 11. UITableVeiwCell中的更新約束條件
- 12. 批量插入Postgresql或MySQL時忽略重複約束條件
- 13. 在SQL Server中啓用所有可能的約束條件
- 14. SQL Server - 約束
- 15. SQL Server約束
- 16. 暫時禁用更新PK和FK數據類型的約束條件
- 17. 旋轉UIView後更新約束條件
- 18. 如何更新CALayer的約束條件?
- 19. 在Oracle SQL中檢查約束條件
- 20. 在SQL Server 2008中檢查約束條件
- 21. 在包含case語句的SQL Server中創建約束條件
- 22. 如何在sql server中執行此約束條件
- 23. 在Sql Server中違反PRIMARY KEY約束條件
- 24. 在sql server中更新所有外鍵約束?
- 25. 列的SQL約束條件
- 26. SQL Server TOP約束
- 27. SQL Server +條件更新
- 28. SQL Server 2008中 - 加約束
- 29. SQL Server 2005批量更新或插入
- 30. SQL Server批量更新避免光標
這是否也允許IDENTITY列值被更改? – Codesleuth 2010-01-15 16:21:45
這可能有點複雜。您可以檢查身份相關信息:http://www.mssqltips.com/tip.asp?tip=1397 – 2010-01-15 17:03:29