我需要更改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 C#
- 3. SQL SERVER FK和約束條件
- 4. SQL Server有條件的外鍵約束
- 5. UITableVeiwCell中的更新約束條件
- 6. 批量插入Postgresql或MySQL時忽略重複約束條件
- 7. 在SQL Server中啓用所有可能的約束條件
- 8. SQL Server約束
- 9. SQL Server - 約束
- 10. 暫時禁用更新PK和FK數據類型的約束條件
- 11. 如何更新CALayer的約束條件?
- 12. 在Oracle SQL中檢查約束條件
- 13. 在SQL Server 2008中檢查約束條件
- 14. 如何在sql server中執行此約束條件
- 15. SQL Server 2005批量更新或插入
- 16. SQL Server 2008中 - 加約束
- 17. 更改約束條件
- 18. 在Linq中執行條件批量更新到SQL
- 19. 用!phpMyAdmin的批量更新=條件
- 20. 批量存儲jooq上的唯一約束更新記錄
- 21. 具有唯一約束條件的SQL更新命令asp.net
- 22. 用於批量更新的SQL Server更新觸發器
- 23. 使用約束條件的複合唯一SQL Server 2008
- 24. SQL Server數據庫中的孤行約束條件
- 25. 等效於SQL Server中的drop table table_name級聯約束條件
- 26. 臨時禁用約束
- 27. 批量Sql更新
- 28. 檢查SQL中的約束條件
- 29. 更新中的SQL約束IGNORE_DUP_KEY
- 30. 在交易過程中禁用約束條件
這是否也允許IDENTITY列值被更改? – Codesleuth 2010-01-15 16:21:45
這可能有點複雜。您可以檢查身份相關信息:http://www.mssqltips.com/tip.asp?tip=1397 – 2010-01-15 17:03:29