2013-09-27 68 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