2

我有几个带有不受信任外键的 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?“不用于复制”的外键总是不受信任的吗?如果不是,我如何让目录视图反映外键的“受信任”状态?

另外,我是否正确假设只要外键被标记为“不受信任”,它就不会被考虑到任何 SQL Server 执行计划中?

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

4

1 回答 1

1

我和你有类似的问题。到目前为止,我发现在外键或约束上设置 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 操作时跳过约束。所以数据修改速度更快。另一方面,这种约束不受信任,因此查询可能会更慢。

于 2015-12-31T07:24:56.670 回答