Analiza kodu SQL w celu poprawy jakości kodu

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Możesz wyeliminować potencjalne problemy z projektowaniem i nazewnictwem oraz uniknąć pułapek wydajności, analizując kod bazy danych. Koncepcje są 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 reguł można zidentyfikować problemy, które należą do następujących kategorii Transact-SQL (T-SQL):

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ć analizę kodu podczas kompilowania projektu. Domyślnie kompilacja uruchamia wszystkie dołączone reguły, 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 oraz ich zachowanie w przypadku błędów lub 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 powoduje 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>
...

Możesz dodać StaticCodeAnalysis.SuppressMessages.xml plik 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 może zostać wyświetlone co najmniej jedno ostrzeżenie sklasyfikowane jako problemy projektowe. Rozwiąż te problemy, 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 przerywa działanie, jeśli uruchomisz go wraz z przyszłymi wersjami SQL Server.

Ogólnie rzecz biorąc, nie pomijaj 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 może zostać wyświetlone co najmniej jedno ostrzeżenie sklasyfikowane jako problemy z nazewnictwem. Rozwiąż te problemy, aby uniknąć następujących sytuacji:

  • Nazwa określona dla obiektu powoduje konflikt z nazwą obiektu systemowego.
  • Należy zawsze ująć określoną nazwę w znaki ucieczki (na przykład w SQL Server, [ i ]).
  • Nazwa, którą podajesz, myli inne osoby próbujące odczytać i zrozumieć kod.
  • Kod przerywa działanie, jeśli uruchomisz go wraz z przyszłymi wersjami SQL Server.

Ogólnie rzecz biorąc, pomiń 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 może zostać wyświetlone co najmniej jedno ostrzeżenie sklasyfikowane jako problemy z wydajnością. Rozwiąż problem z wydajnością, aby uniknąć następującej sytuacji:

  • Skanowanie tabeli odbywa się podczas uruchamiania kodu.

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

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 rozszerzeniu SQL Database Projects, edytuj plik .sqlproj bezpośrednio lub użyj okna dialogowego ustawień.

Użyj okna dialogowego Ustawienia analizy kodu w Visual Studio Code

Rozszerzenie Sql Database Projects udostępnia okno dialogowe ustawień umożliwiające konfigurowanie reguł analizy kodu bez bezpośredniego edytowania .sqlproj pliku.

Aby otworzyć okno dialogowe Ustawienia Code Analysis, kliknij prawym przyciskiem myszy projekt w widoku Database Projects i wybierz Ustawienia Code Analysis.

Zrzut ekranu okna dialogowego Ustawienia analizy kodu w Visual Studio Code, pokazujący listę reguł pogrupowanych według kategorii.

W oknie dialogowym można wykonywać następujące czynności:

  • Włącz lub wyłącz analizę kodu w kompilacji przy użyciu przełącznika Włącz analizę kodu w kompilacji znajdującego się w górnej części okna dialogowego.
  • Włącz lub wyłącz kategorię reguł , zaznaczając lub usuwając zaznaczenie pola wyboru obok nazwy kategorii (Projektowanie, nazewnictwo, wydajność).
  • Zmień ważność reguły , wybierając poziom ważności z listy rozwijanej obok reguły. Dostępne opcje to Ostrzeżenie, Błąd i Brak.
  • Wyszukaj regułę przy użyciu paska wyszukiwania w górnej części listy reguł.
  • Filtruj reguły według ważności przy użyciu listy rozwijanej Wszystkie ważności .

Wybierz przycisk OK , aby zapisać zmiany i zamknąć okno dialogowe, lub Zastosuj , aby zapisać bez zamykania. Wybierz pozycję Resetuj , aby przywrócić ustawienia domyślne.

Edytowanie pliku projektu SQL w celu zmodyfikowania ustawień analizy kodu

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

Aby włączyć lub wyłączyć analizę kodu SQL w programie SQL Server Management Studio (SSMS), kliknij prawym przyciskiem myszy projekt w Solution Explorer i wybierz pozycję Właściwości. Na karcie Analiza kodu okna właściwości wybierz wybrane ustawienia analizy kodu.

Aby wyłączyć określoną regułę lub zmienić ważność reguły, wybierz odpowiednią opcję z listy rozwijanej dla tej reguły na liście reguł.

Aby włączyć lub wyłączyć analizę kodu SQL w Visual Studio, kliknij prawym przyciskiem myszy projekt w Solution Explorer i wybierz pozycję Właściwości. Na karcie Analiza kodu okna właściwości wybierz wybrane ustawienia analizy kodu.

Aby wyłączyć określoną regułę lub zmienić ważność reguły, wybierz odpowiednią opcję z listy rozwijanej dla tej reguły na liście reguł.

Aby włączyć lub wyłączyć analizę kodu SQL w Visual Studio, kliknij prawym przyciskiem myszy projekt w Solution Explorer i wybierz pozycję Właściwości. Na karcie Analiza kodu okna właściwości wybierz wybrane ustawienia analizy kodu.

Aby wyłączyć określoną regułę lub zmienić ważność reguły, wybierz odpowiednią opcję z listy rozwijanej dla tej reguły na liście reguł.

Aby zastąpić ustawienia analizy kodu w pliku projektu, użyj właściwości /p:RunSqlCodeAnalysis i /p:SqlCodeAnalysisRules wraz z poleceniem 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"