2013-09-27 108 views
2

我有一個數據庫,並禁用所有的外鍵約束。沒有人會手動禁用它們。 SQL Server能否由於任何原因自動禁用它們?備份或還原會關閉它們嗎?什麼可以禁用外鍵約束?

我該如何着手將它們重新打開?

我們正在使用SQL Server 2008.

+0

你的意思是禁用或不可信嗎?你能發佈這個查詢的輸出嗎?SELECT fk.is_not_trusted,* FROM sys.foreign_keys fk'? –

+0

@BogdanSahlean - SYS.FOREIGN_KEYS.is_disabled設置爲1. – Justin808

+0

並且'is_not_trusted'位? –

回答

1

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 
+0

如果存在違反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