如何检查每个单独表的禁用外键关系的完整性?(SQL Server 2008)

IBC*_*IBC 2 sql-server-2008 foreign-key

我正在移植一个巨大的遗留数据库,许多不同的遗留前端依赖于它。当我完成后,一个新的前端将与所有旧的遗留前端一起运行,减去我针对移植数据库替换的前端。

无论如何,遗留数据库没有定义任何外键关系。我的计划是开始将它们放入,但让它们禁用以支持旧的前端。但是,我想在某种存储过程中使用禁用的外键关系来检查数据库的完整性(我会经常将其作为完整性测试套件的一部分执行)。这是否涉及尝试打开每一个,然后记录错误消息,然后再次将其关闭?有没有一个特殊的命令可以一次性完成这一切?

您需要帮助的任何脚本都会很好,我不擅长 T-SQL。理想情况下,我希望脚本返回一个由表名、记录的主键值和失败记录的外键名称组成的表。

谢谢!

小智 5

这些DBCC CHECKCONSTRAINTS命令可以按如下方式运行:

  • DBCC CHECKCONSTRAINTS (TableName) - 检查单个表
  • DBCC CHECKCONSTRAINTS (ConstraintName) - 检查单个约束
  • DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS - 检查数据库中的所有约束
  • DBCC CHECKCONSTRAINTS WITH ALL_ERRORMSGS - 返回所有违反约束的行
  • DBCC CHECKCONSTRAINTS WITH NO_INFOMSGS - 查询运行时抑制消息
  • DBCC CHECKCONSTRAINTS 只检查启用的约束

请记住,SQL Server 需要通读所有数据以检查约束,因此请注意不要对大型或非常繁忙的数据库全面运行此操作。这应该是非工作时间运行的,而且对于非常大的数据库,您应该在表级别或约束级别运行它。