微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 启用检查现有数据的外键

我喜欢外键,但我遇到了一个问题.我有一个转换程序,我禁用表的外键.我这样做的原因是我可以重新转换主表中的所有记录,但是让其他表依赖于那些未触及的表而不必每次都重新转换它们因为它们是巨大的.

我正在使用这些命令来禁用和重新启用外键:

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

ALTER TABLE MyTable CHECK CONSTRAINT MyConstraint

但是,在我重新启用约束“检查创建或重新启用时的现有数据”仍然设置为否.我知道它被设置为否因为我禁用了约束,但是通过这样做它改变了我的数据库模式,我不喜欢.我认为这将被视为重新启用约束并将检查现有数据,但显然不是.

有没有办法用ALTER TABLE命令改变它?我知道如果我删除约束并重新创建它,我就可以了,但我不打算编写脚本来重新创建我拥有的每个外键并保持它.

我正在使用sql Server 2008 R2.

解决方法

要重新启用约束:
-- Enable the constraint
 ALTER TABLE MyTable 
 WITH CHECK CHECK CONSTRAINT MyConstraint
 GO

注意:您必须指定CHECK两次以强制检查所有外键值是否有效.

FOREIGN KEY and CHECK constraints that are disabled are marked
is_not_trusted.These are viewable in the sys.check_constraints and
sys.foreign_keys catalog views. This means that the constraint is no
longer being verified by the system for all rows of the table. Even
when you re-enable the constraint,it will not reverify the existing
rows against the table unless you specify the WITH CHECK option of
ALTER TABLE. Specifying WITH CHECK marks the constraint as trusted
again.

参考:Guidelines for Disabling Indexes and Constraints

正如评论中所述(对于搜索引擎),这对应于

sys.foreign_keys.is_not_trusted

在目录视图中

原文地址:https://www.jb51.cc/mssql/74701.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐