Partilhar via


Análise de código SQL para melhorar a qualidade do código

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Você pode eliminar possíveis problemas de design e nomenclatura e evitar armadilhas de desempenho analisando o código do banco de dados. Os conceitos são muito semelhantes à realização de análise estática para detetar e corrigir defeitos no código gerenciado. Você configura quais regras de análise deseja aplicar ao código do banco de dados, analisa o código e, em seguida, corrige ou ignora os problemas identificados. Antes de analisar o código do banco de dados, você deve primeiro importar o esquema do banco de dados para um projeto de banco de dados. Para obter mais informações, consulte Começar a partir de um banco de dados existente.

Ao realizar a análise estática com as regras fornecidas, você pode identificar problemas que se enquadram nas seguintes categorias:

  • Problemas de design do T-SQL Problemas de design incluem código que pode não se comportar da maneira esperada, sintaxe preterida e problemas que podem causar problemas quando o design do banco de dados é alterado.

  • Problemas de nomenclatura do T-SQL Problemas de nomenclatura surgem se o nome de um objeto de banco de dados pode causar problemas inesperados ou violar convenções geralmente aceitas.

  • Problemas de desempenho do T-SQL Problemas de desempenho incluem código que pode reduzir visivelmente a velocidade na qual as operações de banco de dados são concluídas. Muitos desses problemas identificam o código que causará uma verificação de tabela quando o código for executado.

    Captura de tela das configurações do projeto do SQL Server Data Tools para regras de análise de código.

As regras de análise de código são extensíveis. Você pode criar suas próprias regras para impor seus próprios padrões de codificação. Para obter mais informações, consulte Visão geral da extensibilidade das regras de análise de código.

Exemplo de arquivo de projeto SQL e sintaxe

Um arquivo de projeto SQL pode conter duas propriedades, RunSqlCodeAnalysis e SqlCodeAnalysisRules. O elemento RunSqlCodeAnalysis especifica se a análise de código é executada quando o projeto é criado. Por padrão, todas as regras incluídas são executadas e a deteção de padrão de regra resulta em um aviso de compilação.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
  </PropertyGroup>
...

O elemento SqlCodeAnalysisRules especifica as regras e seu comportamento de erro/aviso. No exemplo a seguir, as regras Microsoft.Rules.Data.SR0006 e Microsoft.Rules.Data.SR0007 estão desabilitadas e uma deteção para a regra Microsoft.Rules.Data.SR0008 resultará em um erro de compilação.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

Um arquivo StaticCodeAnalysis.SuppressMessages.xml pode ser adicionado ao projeto para suprimir descobertas específicas de análise de código. Exemplo seguinte elimina o aviso SR0001 para o procedimento armazenado no arquivo StoredProcedures/uspGetEmployeeManagers.sql.

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="StoredProcedures/uspGetEmployeeManagers.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

Regras fornecidas

Problemas de design do T-SQL

Quando você analisa o código T-SQL em seu projeto de banco de dados, um ou mais avisos podem ser categorizados como problemas de design. Você deve resolver problemas de design para evitar as seguintes situações:

  • Alterações subsequentes no banco de dados podem quebrar aplicativos que dependem dele.
  • O código pode não produzir o resultado esperado.
  • O código pode quebrar se você executá-lo com versões futuras do SQL Server.

Em geral, você não deve suprimir um problema de design porque ele pode quebrar seu aplicativo, agora ou no futuro.

As regras fornecidas identificam os seguintes problemas de design:

Problemas de nomenclatura do T-SQL

Quando você analisa o código T-SQL em seu projeto de banco de dados, um ou mais avisos podem ser categorizados como problemas de nomenclatura. Você deve resolver problemas de nomenclatura para evitar as seguintes situações:

  • O nome especificado para um objeto pode entrar em conflito com o nome de um objeto do sistema.
  • O nome especificado sempre precisará ser incluído em caracteres de escape (no SQL Server, '[' e ']').
  • O nome que você especificou pode confundir outras pessoas que tentam ler e entender seu código.
  • O código pode quebrar se você executá-lo com versões futuras do SQL Server.

Em geral, você pode suprimir um problema de nomenclatura se outros aplicativos que não podem ser alterados dependerem do nome atual.

As regras fornecidas identificam os seguintes problemas de design:

Problemas de desempenho do T-SQL

Quando você analisa o código T-SQL em seu projeto de banco de dados, um ou mais avisos podem ser categorizados como problemas de desempenho. Você deve resolver um problema de desempenho para evitar a seguinte situação:

  • Uma verificação de tabela ocorrerá quando o código for executado.

Em geral, você pode suprimir um problema de desempenho se a tabela contiver tão poucos dados que uma verificação não fará com que o desempenho caia significativamente.

As regras fornecidas identificam os seguintes problemas de design:

Habilitar e desabilitar a análise de código

Para habilitar ou desabilitar a análise de código SQL no Visual Studio, clique com o botão direito do mouse no projeto no Gerenciador de Soluções e selecione Propriedades. Na guia Análise de código da janela de propriedades, selecione as configurações de análise de código desejadas.

Para desativar ou habilitar uma regra específica, selecione-a na tabela. Para alterar a gravidade de uma regra, marque a caixa Tratar Aviso como Erro para aquela regra na lista.

Para habilitar ou desabilitar a análise de código SQL nos projetos SQL no estilo SDK (visualização), edite o arquivo .sqlproj diretamente. Abra o arquivo .sqlproj na visualização do Gerenciador de Soluções ao clicar duas vezes no projeto.

No editor de texto, adicione um elemento <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> ao primeiro bloco <PropertyGroup> para habilitar a análise de código. Para desativar a análise de código, altere o valor do elemento RunSqlCodeAnalysis para True ou False ou remova o elemento completamente.

Para habilitar ou desabilitar a análise de código SQL na extensão Projetos do Banco de Dados SQL, edite o arquivo .sqlproj diretamente. Abra o arquivo .sqlproj na visualização do Explorer ou clicando com o botão direito do mouse no projeto na visualização Projetos de Banco de Dados e selecionando Editar arquivo .sqlproj.

No editor de texto, adicione um elemento <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> ao primeiro bloco <PropertyGroup> para habilitar a análise de código. Para desativar a análise de código, altere o valor do elemento RunSqlCodeAnalysis para True ou False ou remova o elemento completamente.

Para substituir as configurações de análise de código no arquivo de projeto, você pode usar as propriedades /p:RunSqlCodeAnalysis e /p:SqlCodeAnalysisRules com o comando dotnet build. Por exemplo, para criar com a análise de código desativada:

dotnet build /p:RunSqlCodeAnalysis=False

Para construir com configurações específicas de regra de análise de código SQL:

dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"