我有几个带有不受信任的外键的SQL Server 2005数据库。这些密钥标记为"不用于复制" is_not_for_replication=1
对象目录视图中的(sys.foreign_keys
)。
我运行了一个捕获这些不受信任密钥并运行
的脚本ALTER TABLE [tablename] WITH CHECK
CHECK CONSTRAINT [keyname]
针对每个密钥。对于除一个以外的所有结果,结果表明这些密钥已经过验证(重新信任?),但sys.foreign_keys
视图仍将它们标记为不可信。
为什么此对象目录视图不反映"重新信任"密钥为is_not_trusted=0
?是"不是复制" foreign_key总是不受信任?如果没有,我如何获得目录视图以反映"信任"外键的状态?
另外,我认为只要外键标记为"不可信任"它不会被考虑到任何SQL Server执行计划?
感谢您的任何意见或建议。
答案 0 :(得分:0)
我有类似你的问题。到目前为止我发现的是,对外键或约束设置NOT FOR REPLICATION总是使它不受信任。只是为了确认:https://stackoverflow.com/a/16313703/1513907
如果约束或外键不受信任,则查询优化器不会使用它,因此它不会反映在执行计划中。 https://sqlserverfast.com/blog/hugo/2007/03/can-you-trust-your-constraints/
为了使这样的密钥再次受信任,需要删除它并创建而不设置NOT FOR REPLICATION。
我认为有一个权衡。 NOT FOR REPLICATION允许在订户上的复制代理执行DML操作时跳过约束。因此数据修改速度更快。从另一方面来看,这种约束不受信任,因此查询可能会变慢。