您可以将TABLERESULTS 选项与CHECKDB (DBCC CHECKDB WITH TABLERESULTS) 一起使用。
这将为您提供一个记录集,其中包含 Error、Level、State、MessageText(以及许多其他列)等列。
该记录集的Level 列(严重级别)应该足以确定是否有任何错误。
MS 表示级别 11 到 16 是“由用户生成的,并且可以由用户更正”。所以我想说 17 以上的任何东西都应该意味着:停止进行任何备份(以避免用损坏的备份覆盖好的备份),尽可能使系统脱机,并立即通知操作员。
并且级别 11 到 16 可能也应该报告给操作员(通过常规电子邮件或其他方式),以便他在必要时进行检查。 (不过,我不确定CHECKDB 是否会报告级别 11 到 16 的错误。不过,在其中记录错误/通知操作员的代码可能不会受到伤害。)
注意:如果您将TABLERESULTS 与NO_INFOMSGS 结合使用,并且如果CHECKDB 没有发现任何错误,您将不会得到任何错误 结果是记录集,甚至没有一个没有行的记录集。
注意2:在某些情况下,CHECKDB 只会失败并显示错误代码。到目前为止,我只看到一个触发此错误的错误,它看起来像这样:
Msg 211, Level 23, State 51, Line 3
Possible schema corruption. Run DBCC CHECKCATALOG.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
我没有经常使用 ADO.NET,但我认为 ADO.NET 会通过抛出异常来做出反应。
此外,由于这是一个严重性 >= 20 的错误,它会导致客户端连接被关闭。
总结一下:我会运行DBCC CHECKDB WITH TABLERESULTS。如果命令失败,则存在问题(可能是严重问题)。如果没有,请继续遍历结果集,并查找任何 >= 17 的严重级别。如果找到,则可能也存在某种严重问题。