我有一个带有引用的外键约束的 SQL Server 2012 数据库Countries.CountryID = States.CountryID
我需要重新创建Countries
表,所以我从表中删除了这个 FOREIGN KEY States
(否则它不允许我删除国家/地区)
在我这样做之后,我想重新创建 FK,States
但它不允许我这样做,除非我NO CHECK
这样指定:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
起初我没有意识到有些州的行有CountryID
没有匹配的Countries.CountryID
记录。显然WITH NOCHECK
允许我继续没有错误。
现在 SQLServer 将此 FK 标记为“不可信”,MSDN 表示通过检查所有约束来重新启用查询优化器。那么为什么即使某些州的 CountryID 无效,以下行也不会给我一个错误?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
我认为这应该引发错误。