Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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):
Problemy z projektowaniem języka T-SQL: Problemy projektowe obejmują kod, który może nie zachowywać się w oczekiwany sposób, przestarzałą składnię i problemy, które mogą powodować problemy podczas projektowania zmian 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 znacznie zmniejszyć szybkość operacji bazy danych. Wiele z tych problemów identyfikuje kod, który powoduje skanowanie tabeli podczas uruchamiania 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ć 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:
- SR0001: Unikaj użycia SELECT * w procedurach składowanych, widokach i funkcjach zwracających tabele
- SR0008: rozważ użycie SCOPE_IDENTITY zamiast @@IDENTITY
- SR0009: Unikaj używania typów zmiennej długości o rozmiarze 1 lub 2
- SR0010: Unikaj używania przestarzałej składni podczas dołączania tabel lub widoków
- SR0013: Parametr wyjściowy (parametr) nie jest wypełniany we wszystkich ścieżkach kodu
- SR0014: Ryzyko utraty danych podczas rzutowania z {Type1} na {Type2}
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:
- SR0011: Unikaj używania znaków specjalnych w nazwach obiektów
- SR0012: Unikaj używania zastrzeżonych wyrazów dla nazw typów
- SR0016: Unikaj używania sp_ jako prefiksu dla procedur składowanych
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:
- SR0004: Unikaj używania kolumn, które nie mają indeksów jako wyrażeń testowych w predykatach IN
- SR0005: Unikaj używania wzorców rozpoczynających się od "%" w predykatach LIKE
- SR0006: Przenieś odwołanie do kolumny na jedną stronę operatora porównania, aby użyć indeksu kolumny
- SR0007: użyj funkcji ISNULL(kolumna, default_value) na kolumnach dopuszczających wartości null w wyrażeniach
- SR0015: wyodrębnianie wywołań funkcji deterministycznych z predykatów WHERE
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.
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"