代码分析规则扩展性概述
提供的代码分析规则报告了数据库代码中的 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 项目,可以通过添加包含规则的包引用,在项目中包含自定义代码分析规则。