我有一个带有引用Countries.CountryID = States.CountryID
的外键约束的SQL Server 2012数据库
我需要重新创建Countries
表,因此我从States
表中删除此FOREIGN KEY(否则将不允许我删除国家/地区)
之后,我想在States
上重新创建FK,但是除非我这样指定NO CHECK
,否则它不允许我这样做:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
起初我没有意识到某些州的行有
CountryID
没有匹配的Countries.CountryID
记录。显然WITH NOCHECK
允许我继续进行而没有错误。现在,将此FK标记为“不可信”的SQLServer,MSDN表示通过检查所有约束来重新启用查询优化器。那么,为什么即使某些州的CountryID无效,以下行也不会给我错误?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
我认为这应该引起一个错误。
最佳答案
为了使约束再次受信任,您需要使用此语法,这看起来有些奇怪。 WITH CHECK
是导致现有数据验证的原因。
ALTER TABLE States
WITH CHECK CHECK CONSTRAINT ALL
GO
和以前一样,这将引发错误,直到您解析具有错误CountryID值的州为止。
关于sql-server - 数据后的SQL NO CHECK FOREIGN KEY,重新启用查询优化器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12221584/