Uwaga
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
baza 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.
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:
- 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 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:
- 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 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:
- 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 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"