Partilhar via


Visão geral da extensibilidade das regras de análise de código

O relatório de regras de análise de código em fornece avisos sobre design, nomenclatura e desempenho no código do banco de dados mencionados por Transact-SQL. Se as regras internas de análise de código não incluírem cobertura para um problema específico do T-SQL ou antipadrão que você deseja detetar automaticamente, você poderá criar regras personalizadas de análise de código de banco de dados.

Por exemplo, talvez você queira criar uma regra personalizada que evite o uso da instrução WAITFOR DELAY, conforme demonstrado em Author custom code analysis rules. Para criar regras personalizadas de análise de código de banco de dados, use 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 de banco de dados

O diagrama a seguir ilustra como os componentes das regras de análise de código de banco de dados são processados:

Captura de tela do fluxo de processamento da análise de código do banco de dados.

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 como você as configurou em seu projeto. Para obter mais informações, consulte Como habilitar e desabilitar regras específicas para análise estática de código de banco de dados. O Extension Manager também carrega todos os assemblies de regras personalizados 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 representando o esquema do banco de dados, incluindo todos os elementos do modelo, relações entre eles e quaisquer propriedades dos elementos.
  • Para regras que examinam elementos específicos, o Dac.Model.TSqlObject que representa esse elemento de esquema no modelo é incluído no contexto.
  • Muitos objetos de esquema também têm uma representação ScriptDom, que pode ser acessada por meio desse contexto. Esta é uma representação baseada em AST de um elemento que pode ser útil ao tentar ver possíveis problemas de sintaxe, como a presença de SelectStarExpression.

Para quaisquer problemas encontrados pela regra, um objeto Dac.CodeAnalysis.SqlRuleProblem é criado. Ao criar este objeto SqlRuleProblem, os Dac.Model.TSqlObject relevantes e, possivelmente, um elemento de representação ScriptDom são passados para o construtor, sendo usados para determinar o local do problema nos seus arquivos de código-fonte. No final da análise, todos esses problemas são passados para o Gerenciador de Erros e exibidos na Lista de Erros.

Incorporar regras personalizadas em um projeto SQL

Com os projetos SQL no estilo SDK Microsoft.Build.Sql, você inclui regras de análise de código personalizado no projeto adicionando uma referência de pacote que contém as regras. O exemplo a seguir mostra uma referência de pacote para um pacote de regras de análise de código personalizado:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

Saiba mais sobre a referenciação de um pacote de regras de análise de código num projeto SQL nas referências de pacote .