SQL Server不受信任的外键

时间:2015-02-12 20:11:16

标签: sql-server sql-server-2005 foreign-keys trusted-vs-untrusted

我有几个带有不受信任的外键的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执行计划?

感谢您的任何意见或建议。

1 个答案:

答案 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操作时跳过约束。因此数据修改速度更快。从另一方面来看,这种约束不受信任,因此查询可能会变慢。