代码分析规则扩展性概述

提供的代码分析规则报告了数据库代码中的 Transact-SQL 设计、命名和性能警告。 如果内置代码分析规则未涵盖你希望自动检测的特定 T-SQL 问题或反模式,你可以创建自定义数据库代码分析规则。

例如,你可能想要创建避免使用 WAITFOR DELAY 语句的自定义规则,如创作自定义代码分析规则中所述。 若要创建自定义数据库代码分析规则,请使用 CodeAnalysis 命名空间中的类。

本概述介绍数据库代码分析规则的各个组件之间的基本体系结构。

数据库代码分析规则组件

下图说明数据库代码分析规则组件的处理方式:

数据库代码分析处理流的屏幕截图。

使用数据库代码分析规则功能时,会根据它们在项目中的配置方式加载和使用所有规则。 有关详细信息,请参阅操作说明:为数据库代码的静态分析启用和禁用特定规则。 扩展管理器还将加载你创建和注册的任何自定义规则程序集。

自定义代码分析规则类继承自 SqlCodeAnalysisRule。 自定义规则类可通过其规则执行上下文访问有用的对象。 其中包括以下对象:

  • 有关规则本身的元数据。
  • Dac.Model.TSqlModel 表示数据库的架构,包括所有模型元素、这些元素与其任何属性之间的关系。
  • 对于检查特定元素的规则,Dac.Model.TSqlObject 表示模型中的架构元素包含在上下文中。
  • 许多架构对象还具有 ScriptDom 表示形式,可通过此上下文访问。 是基于 AST 的元素表示形式,在尝试查看潜在语法问题(例如存在 SelectStarExpression)时可能会很有用。

对于规则发现的任何问题,将创建一个 Dac.CodeAnalysis.SqlRuleProblem 对象。 在创建此 SqlRuleProblem 对象时,相关的 Dac.Model.TSqlObject 以及可能的 ScriptDom 表示形式元素将传递到构造函数中,并且它们将用于确定问题在源代码文件中的位置。 在分析结束时,所有这些问题将传递到错误管理器并在错误列表中显示。

在 SQL 项目中合并自定义规则

使用 Microsoft.Build.Sql SDK 样式的 SQL 项目,可以通过添加包含规则的包引用,在项目中包含自定义代码分析规则。