Visão geral da extensibilidade das regras de análise de código
As regras de análise de código fornecidas relatam avisos de design, nomenclatura e desempenho do Transact-SQL no código do banco de dados. Se as regras de análise de código integradas não tiverem cobertura para um determinado problema T-SQL ou antipadrão a ser detectado automaticamente, você poderá criar regras de análise de código do banco de dados personalizadas.
Por exemplo, você pode querer criar uma regra personalizada que evite usar a instrução WAITFOR DELAY, como demonstrado em Criar regras de análise de código personalizadas. Para criar regras de análise de código personalizado do banco de dados, você pode usar as classes no namespace CodeAnalysis.
Esta visão geral abrange a arquitetura básica entre os vários componentes das regras de análise de código de banco de dados.
Componentes de regras de análise de código do banco de dados
O diagrama a seguir ilustra como os componentes de regras de análise de código de banco de dados são processados:
Quando você usa o recurso de regras de análise de código de banco de dados, todas as regras são carregadas e usadas de acordo com a forma como você as configurou em seu projeto. Para obter mais informações, confira Como habilitar e desabilitar regras específicas para análise estática de código do banco de dados. O Gerenciador de Extensões também carrega todos os assemblies de regra personalizada que você criou e registrou.
Uma classe de regra de análise de código personalizada herda de SqlCodeAnalysisRule. A classe de regra personalizada pode acessar objetos úteis por meio de seu contexto de execução de regra. Esses objetos incluem:
- Metadados sobre a regra em si.
- O
Dac.Model.TSqlModel
que representa o esquema do banco de dados, incluindo todos os elementos do modelo, relações entre eles e as propriedades dos elementos. - Para regras que examinam os elementos específicos de
Dac.Model.TSqlObject
que representa o elemento de esquema no modelo que está incluído no contexto. - Muitos objetos de esquema também têm uma representação ScriptDom, que pode ser acessada por meio desse contexto. Essa é uma representação baseada em AST de um elemento que pode ser útil ao tentar prever problemas de sintaxe em potencial, como a presença de SelectStarExpression.
Para quaisquer problemas encontrados pela regra, um objeto Dac.CodeAnalysis.SqlRuleProblem
é criado. Ao criar este objeto SqlRuleProblem
, o Dac.Model.TSqlObject
relevante e possivelmente um elemento de representação ScriptDom são passados para o construtor e usados para determinar o local do problema em seus arquivos de código-fonte. Ao final da análise, todos esses problemas são passados para o Gerenciador de Erro e exibidos na Lista de Erros.
Incorporar regras personalizadas em um projeto SQL
Com os projetos SQL no estilo SDK do Microsoft.Build.Sql, você inclui regras de análise de código personalizadas no projeto adicionando uma referência de pacote que contém as regras.