我有一個數據庫,並禁用所有的外鍵約束。沒有人會手動禁用它們。 SQL Server能否由於任何原因自動禁用它們?備份或還原會關閉它們嗎?什麼可以禁用外鍵約束?
我該如何着手將它們重新打開?
我們正在使用SQL Server 2008.
我有一個數據庫,並禁用所有的外鍵約束。沒有人會手動禁用它們。 SQL Server能否由於任何原因自動禁用它們?備份或還原會關閉它們嗎?什麼可以禁用外鍵約束?
我該如何着手將它們重新打開?
我們正在使用SQL Server 2008.
SQL Server不會自動禁用約束。即使備份和恢復也不能單獨關閉它們。
只有禁用約束的方式是通過運行ALTER TABLE命令像這樣的:
ALTER TABLE table_Name NOCHECK CONSTRAINT all
要打開所有約束在一個表上:
ALTER TABLE table_Name CHECK CONSTRAINT all
要打開約束在數據庫中的所有表,你可以使用這個命令:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"
GO
如果存在違反CHECK的遺留數據,只需在現有的CONSTRAINT上籤發'CHECK'不會使其立即受信任。 CHECK確實打開了CONSTRAINT的'檢查',但是爲了恢復'信任',你需要發出'WITH CHECK': 'ALTER TABLE [foo] WITH CHECK CHECK CONSTRAINT [FK_foo_bar]; ALTER TABLE [foo] WITH CHECK CHECK CONSTRAINT ALL;' – Graeme
你的意思是禁用或不可信嗎?你能發佈這個查詢的輸出嗎?SELECT fk.is_not_trusted,* FROM sys.foreign_keys fk'? –
@BogdanSahlean - SYS.FOREIGN_KEYS.is_disabled設置爲1. – Justin808
並且'is_not_trusted'位? –