我有一个数据库,并禁用所有的外键约束。没有人会手动禁用它们。 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'位? –