par*_*ent 16 sql-server foreign-keys
我有一个带有引用的外键约束的SQL Server 2012数据库 Countries.CountryID = States.CountryID
我需要重新创建Countries
表,所以我从States
表中删除这个FOREIGN KEY (否则它不允许我DROP国家)
在我这样做之后,我想重新创建FK,States
但除非我这样指定,否则它不允许我NO CHECK
:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
Run Code Online (Sandbox Code Playgroud)
我起初并没有意识到有些国家的行CountryID
没有匹配Countries.CountryID
记录.显然WITH NOCHECK
允许我毫无错误地继续前进.
现在SQLServer将此FK标记为"不受信任",MSDN表示通过检查所有约束来重新启用查询优化器.那么,为什么即使某些国家的CountryID无效,以下行也不会给我一个错误?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
Run Code Online (Sandbox Code Playgroud)
我认为这应该会引起错误.
Joe*_*lli 17
为了使约束再次受到信任,您需要使用这种语法,这看起来有点奇怪.这WITH CHECK
是导致现有数据验证的原因.
ALTER TABLE States
WITH CHECK CHECK CONSTRAINT ALL
GO
Run Code Online (Sandbox Code Playgroud)
和以前一样,这会抛出一个错误,直到您解决具有错误CountryID值的状态.