Udostępnij za pośrednictwem


Analiza kodu SQL w celu poprawy jakości kodu

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instancebaza danych SQL w usłudze Microsoft Fabric

Możesz wyeliminować potencjalne problemy z projektowaniem i nazewnictwem oraz uniknąć pułapek wydajności, analizując kod bazy danych. Koncepcje są bardzo podobne do przeprowadzania analizy statycznej w celu wykrywania i poprawiania wad w kodzie zarządzanym. Należy skonfigurować reguły analizy, które mają być stosowane do kodu bazy danych, analizować kod, a następnie rozwiązywać lub ignorować zidentyfikowane problemy. Przed przeanalizowaniem kodu bazy danych należy najpierw zaimportować schemat bazy danych do projektu bazy danych. Aby uzyskać więcej informacji, zobacz Rozpocznij od istniejącej bazy danych.

Wykonując analizę statyczną przy użyciu udostępnionych reguł, można zidentyfikować problemy, które należą do następujących kategorii:

  • Problemy projektowe T-SQL Problemy projektowe obejmują kod, który może nie zachowywać się tak, jak oczekujesz, przestarzała składnia oraz kwestie, które mogą stanowić trudności, gdy zmienia się projekt Twojej bazy danych.

  • problemy z nazewnictwem języka T-SQL problemy z nazewnictwem, jeśli nazwa obiektu bazy danych może powodować nieoczekiwane problemy lub naruszać ogólnie zaakceptowane konwencje.

  • problemy z wydajnością języka T-SQL problemy z wydajnością obejmują kod, który może znacząco zmniejszyć szybkość wykonywania operacji bazy danych. Wiele z tych problemów identyfikuje kod, który spowoduje skanowanie tabeli podczas wykonywania kodu.

    Zrzut ekranu przedstawiający ustawienia projektu narzędzi SQL Server Data Tools dla reguł analizy kodu.

Reguły analizy kodu są rozszerzalne. Możesz utworzyć własne reguły, aby wymusić własne standardy kodowania. Aby uzyskać więcej informacji, zobacz Omówienie rozszerzalności reguł analizy kodu.

Przykład i składnia pliku projektu SQL

Plik projektu SQL może zawierać dwie właściwości, RunSqlCodeAnalysis i SqlCodeAnalysisRules. Element RunSqlCodeAnalysis określa, czy uruchamia się analiza kodu podczas budowania projektu. Domyślnie wszystkie dołączone reguły są uruchamiane, a wykrywanie wzorców reguł powoduje ostrzeżenie kompilacji.

<?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>
...

Element SqlCodeAnalysisRules określa reguły i działanie błędów/ostrzeżeń. W poniższym przykładzie reguły Microsoft.Rules.Data.SR0006 i Microsoft.Rules.Data.SR0007 są wyłączone, a wykrywanie reguły Microsoft.Rules.Data.SR0008 spowoduje błąd kompilacji.

<?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>
...

Plik StaticCodeAnalysis.SuppressMessages.xml można dodać do projektu, aby pominąć konkretne wyniki analizy kodu. Poniższy przykład tłumi ostrzeżenie SR0001 dla procedury składowanej w pliku 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>

Podane reguły

Problemy z projektowaniem języka T-SQL

Podczas analizowania kodu T-SQL w projekcie bazy danych co najmniej jedno ostrzeżenie może zostać sklasyfikowane jako problemy projektowe. Należy rozwiązać problemy projektowe, aby uniknąć następujących sytuacji:

  • Kolejne zmiany bazy danych mogą spowodować przerwanie aplikacji, które od niej zależą.
  • Kod może nie wygenerować oczekiwanego wyniku.
  • Kod może ulec awarii, jeśli uruchomisz go z przyszłymi wersjami programu SQL Server.

Ogólnie rzecz biorąc, nie należy pomijać problemu projektowego, ponieważ może to spowodować przerwanie aplikacji — teraz lub w przyszłości.

Podane reguły identyfikują następujące problemy projektowe:

Problemy z nazewnictwem języka T-SQL

Podczas analizowania kodu T-SQL w projekcie bazy danych co najmniej jedno ostrzeżenie może być podzielone na kategorie jako problemy z nazewnictwem. Aby uniknąć następujących sytuacji, należy rozwiązać problemy z nazewnictwem:

  • Nazwa określona dla obiektu może powodować konflikt z nazwą obiektu systemowego.
  • Określona nazwa zawsze musi być ujęta w znaki ucieczki (w programie SQL Server, "[" i "]").
  • Określona nazwa może mylić inne osoby, które próbują odczytać i zrozumieć kod.
  • Kod może ulec awarii, jeśli uruchomisz go z przyszłymi wersjami programu SQL Server.

Ogólnie rzecz biorąc, możesz pominąć problem z nazewnictwem, jeśli inne aplikacje, których nie można zmienić, zależą od bieżącej nazwy.

Podane reguły identyfikują następujące problemy projektowe:

Problemy z wydajnością języka T-SQL

Podczas analizowania kodu T-SQL w projekcie bazy danych co najmniej jedno ostrzeżenie może zostać sklasyfikowane jako problemy z wydajnością. Należy rozwiązać problem z wydajnością, aby uniknąć następującej sytuacji:

  • Skanowanie tabeli zostanie wykonane po wykonaniu kodu.

Ogólnie rzecz biorąc, można pominąć problem z wydajnością, jeśli tabela zawiera tak mało danych, że skanowanie nie spowoduje znacznego spadku wydajności.

Podane reguły identyfikują następujące problemy projektowe:

Włączanie i wyłączanie analizy kodu

Aby włączyć lub wyłączyć analizę kodu SQL w programie Visual Studio, kliknij prawym przyciskiem myszy projekt w eksploratorze rozwiązań i wybierz pozycję właściwości . Na karcie Analizy Kodu okna właściwości wybierz odpowiednie ustawienia analizy kodu.

Aby wyłączyć lub włączyć określoną regułę, wybierz regułę z tabeli. Aby zmienić istotność reguły, wybierz pole wyboru Traktuj ostrzeżenie jako błąd dla tej reguły z listy.

Aby włączyć lub wyłączyć analizę kodu SQL w projektach SQL w stylu zestawu SDK (wersja zapoznawcza), edytuj bezpośrednio plik .sqlproj. Otwórz plik .sqlproj z widoku Eksploratora Rozwiązań , klikając dwukrotnie na projekt.

W edytorze tekstów dodaj element <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> do pierwszego bloku <PropertyGroup> w celu włączenia analizy kodu. Aby wyłączyć analizę kodu, zmień wartość elementu RunSqlCodeAnalysis na True lub False lub całkowicie usuń element.

Aby włączyć lub wyłączyć analizę kodu SQL w rozszerzeniu projekty SQL Database, edytuj plik .sqlproj bezpośrednio. Otwórz plik .sqlproj w widoku Eksplorator plików lub kliknij prawym przyciskiem myszy projekt w widoku Projektów Baz Danych i wybierz opcję Edytuj plik .sqlproj.

W edytorze tekstów dodaj element <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> do pierwszego bloku <PropertyGroup> w celu włączenia analizy kodu. Aby wyłączyć analizę kodu, zmień wartość elementu RunSqlCodeAnalysis na True lub False lub całkowicie usuń element.

Aby zastąpić ustawienia analizy kodu w pliku projektu, możesz użyć właściwości /p:RunSqlCodeAnalysis i /p:SqlCodeAnalysisRules za pomocą polecenia dotnet build. Na przykład, aby skompilować kod z wyłączoną analizą:

dotnet build /p:RunSqlCodeAnalysis=False

Aby zbudować kod z określonymi ustawieniami reguł analizy kodu SQL:

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