SQL-Codeanalyse zur Verbesserung der Codequalität

Gilt für:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-Datenbank in Microsoft Fabric

Sie können potenzielle Entwurfs- und Benennungsprobleme beseitigen und Leistungseinbußen vermeiden, indem Sie Ihren Datenbankcode analysieren. Die Konzepte ähneln der Durchführung statischer Analysen zum Erkennen und Beheben von Fehlern in verwaltetem Code. Sie konfigurieren, welche Analyseregeln Sie auf Ihren Datenbankcode anwenden möchten, analysieren den Code und korrigieren oder ignorieren dann die von Ihnen identifizierten Probleme. Bevor Sie Ihren Datenbankcode analysieren können, müssen Sie zuerst Ihr Datenbankschema in ein Datenbankprojekt importieren. Weitere Informationen finden Sie unter Start von einer vorhandenen Datenbank.

Durch die statische Analyse mit den providierten Regeln können Sie Probleme identifizieren, die in die folgenden Transact-SQL (T-SQL)-Kategorien fallen:

  • T-SQL-Entwurfsprobleme: Designprobleme umfassen Code, der sich möglicherweise nicht wie erwartet verhält, veraltete Syntax und Probleme, die beim Entwurf Ihrer Datenbank zu Problemen führen können.

  • T-SQL-Benennungsprobleme: Benennungsprobleme treten auf, wenn der Name eines Datenbankobjekts zu unerwarteten Problemen führen kann oder allgemein akzeptierte Konventionen verletzen kann.

  • T-SQL-Leistungsprobleme: Leistungsprobleme umfassen Code, der die Geschwindigkeit von Datenbankvorgängen erheblich verringern kann. Viele dieser Probleme identifizieren Code, der eine Tabellenüberprüfung verursacht, wenn der Code ausgeführt wird.

    Screenshot der Projekteinstellungen der SQL Server Data Tools für Code-Analyse-Regeln.

Codeanalyseregeln sind erweiterbar. Sie können eigene Regeln erstellen, um Ihre eigenen Codierungsstandards durchzusetzen. Weitere Informationen finden Sie unter Übersicht: Regelerweiterbarkeit für Codeanalyse.

SQL-Projektdateibeispiel und Syntax

Eine SQL-Projektdatei kann zwei Eigenschaften RunSqlCodeAnalysis und SqlCodeAnalysisRules enthalten. Das RunSqlCodeAnalysis Element gibt an, ob codeanalyse ausgeführt werden soll, wenn das Projekt erstellt wird. Standardmäßig führt der Build alle enthaltenen Regeln aus, und die Regelmustererkennung führt zu einer Buildwarnung.

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

Das SqlCodeAnalysisRules Element gibt die Regeln und deren Fehler- oder Warnungsverhalten an. Im folgenden Beispiel sind die Regeln Microsoft.Rules.Data.SR0006 und Microsoft.Rules.Data.SR0007 deaktiviert, und eine Erkennung für die Regel Microsoft.Rules.Data.SR0008 führt zu einem Buildfehler.

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

Sie können dem Projekt eine StaticCodeAnalysis.SuppressMessages.xml Datei hinzufügen, um bestimmte Codeanalyseergebnisse zu unterdrücken. Im folgenden Beispiel wird die Warnung SR0001 für die gespeicherte Prozedur in der Datei StoredProcedures/uspGetEmployeeManagers.sql unterdrückt.

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

Bereitgestellte Regeln

T-SQL-Entwurfsprobleme

Wenn Sie den T-SQL-Code in Ihrem Datenbankprojekt analysieren, sehen Sie möglicherweise eine oder mehrere Warnungen, die als Entwurfsproblem(e) kategorisiert werden. Beheben Sie diese Probleme, um die folgenden Situationen zu vermeiden:

  • Nachfolgende Änderungen an Ihrer Datenbank können Anwendungen unterbrechen, die davon abhängig sind.
  • Der Code erzeugt möglicherweise nicht das erwartete Ergebnis.
  • Der Code wird unterbrochen, wenn Sie ihn mit zukünftigen Versionen von SQL Server ausführen.

Im Allgemeinen unterdrücken Sie kein Designproblem, da sie Ihre Anwendung entweder jetzt oder in Zukunft unterbrechen könnte.

Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:

T-SQL-Benennungsprobleme

Wenn Sie den T-SQL-Code in Ihrem Datenbankprojekt analysieren, werden möglicherweise eine oder mehrere Warnungen als Benennungsprobleme angezeigt. Beheben Sie diese Probleme, um die folgenden Situationen zu vermeiden:

  • Der Name, den Sie für ein Objekt angeben, hat einen Konflikt mit dem Namen eines Systemobjekts.
  • Sie müssen den angegebenen Namen immer in Escapezeichen einschließen (z. B. in SQL Server, [ und ]).
  • Der Name, den Sie angeben, verwechselt andere Personen, die versuchen, Ihren Code zu lesen und zu verstehen.
  • Der Code wird unterbrochen, wenn Sie ihn mit zukünftigen Versionen von SQL Server ausführen.

Im Allgemeinen unterdrücken Sie ein Benennungsproblem, wenn andere Anwendungen, die Sie nicht ändern können, vom aktuellen Namen abhängen.

Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:

T-SQL-Leistungsprobleme

Wenn Sie den T-SQL-Code in Ihrem Datenbankprojekt analysieren, könnten eine oder mehrere Warnungen als Leistungsprobleme kategorisiert werden. Beheben Sie ein Leistungsproblem, um die folgende Situation zu vermeiden:

  • Beim Ausführen des Codes tritt ein Tabellenscan auf.

Im Allgemeinen können Sie ein Leistungsproblem unterdrücken, wenn die Tabelle so wenig Daten enthält, dass eine Überprüfung die Leistung nicht erheblich beeinträchtigt.

Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:

Aktivieren und Deaktivieren der Codeanalyse

Um die SQL-Codeanalyse in der Erweiterung SQL-Datenbankprojekte zu aktivieren oder zu deaktivieren, bearbeiten Sie die .sqlproj Datei direkt, oder verwenden Sie das Dialogfeld "Codeanalyseeinstellungen".

Verwenden des Dialogfelds "Code Analysis Einstellungen" in Visual Studio Code

Die Erweiterung SQL-Datenbankprojekte bietet ein Einstellungsdialogfeld zum Konfigurieren von Codeanalyseregeln, ohne die .sqlproj Datei direkt zu bearbeiten.

Um das Dialogfeld Code Analysis Einstellungen zu öffnen, klicken Sie im Datenbankprojekteansicht mit der rechten Maustaste auf Ihr Projekt, und wählen Sie Code Analysis Einstellungen aus.

Screenshot des Dialogfelds Code Analysis Einstellungen in Visual Studio Code mit der Liste der regeln gruppiert nach category.

Im Dialogfeld haben Sie folgende Möglichkeiten:

  • Aktivieren oder deaktivieren Sie die Codeanalyse beim Build mithilfe des Schalters Codeanalyse beim Build aktivieren oben im Dialogfeld.
  • Aktivieren oder deaktivieren Sie eine Regelkategorie , indem Sie das Kontrollkästchen neben dem Kategorienamen (Entwurf, Benennung, Leistung) aktivieren oder deaktivieren.
  • Ändern Sie den Schweregrad einer Regel , indem Sie in der Dropdownliste neben der Regel eine Schweregrad auswählen. Verfügbare Optionen sind Warnung, Fehler und Keine.
  • Suchen Sie mithilfe der Suchleiste oben in der Regelliste nach einer Regel.
  • Filterregeln nach Schweregrad mithilfe der Dropdownliste "Alle Schweregrade" .

Wählen Sie 'OK' aus, um Ihre Änderungen zu speichern und das Dialogfeld zu schließen, oder 'Übernehmen', um zu speichern, ohne zu schließen. Wählen Sie "Zurücksetzen" aus, um auf die Standardeinstellungen zurückzusetzen.

Bearbeiten der SQL-Projektdatei zum Ändern von Codeanalyseeinstellungen

Fügen Sie im Text-Editor das <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> Element zum ersten <PropertyGroup> Block hinzu, um die Codeanalyse zu aktivieren. Um die Codeanalyse zu deaktivieren, ändern Sie den Wert des RunSqlCodeAnalysis Elements zu False oder entfernen Sie das Element vollständig.

Um die SQL-Codeanalyse in SQL Server Management Studio (SSMS) zu aktivieren oder zu deaktivieren, klicken Sie mit der rechten Maustaste auf das Projekt in Solution Explorer, und wählen Sie Properties aus. Wählen Sie auf der Registerkarte Code Analysis des Eigenschaftenfensters die gewünschten code analysis Einstellungen aus.

Um eine bestimmte Regel zu deaktivieren oder den Schweregrad einer Regel zu ändern, wählen Sie die entsprechende Option aus der Dropdownliste für diese Regel in der Regelliste aus.

Um die SQL-Codeanalyse in Visual Studio zu aktivieren oder zu deaktivieren, klicken Sie mit der rechten Maustaste auf das Projekt in Solution Explorer und wählen Sie Properties aus. Wählen Sie auf der Registerkarte Code Analysis des Eigenschaftenfensters die gewünschten code analysis Einstellungen aus.

Um eine bestimmte Regel zu deaktivieren oder den Schweregrad einer Regel zu ändern, wählen Sie die entsprechende Option aus der Dropdownliste für diese Regel in der Regelliste aus.

Um die SQL-Codeanalyse in Visual Studio zu aktivieren oder zu deaktivieren, klicken Sie mit der rechten Maustaste auf das Projekt in Solution Explorer und wählen Sie Properties aus. Wählen Sie auf der Registerkarte Code Analysis des Eigenschaftenfensters die gewünschten code analysis Einstellungen aus.

Um eine bestimmte Regel zu deaktivieren oder den Schweregrad einer Regel zu ändern, wählen Sie die entsprechende Option aus der Dropdownliste für diese Regel in der Regelliste aus.

Um die Codeanalyseeinstellungen in der Projektdatei außer Kraft zu setzen, verwenden Sie die Eigenschaften /p:RunSqlCodeAnalysis und /p:SqlCodeAnalysisRules mit dem Befehl dotnet build. So erstellen Sie z. B. mit deaktivierter Codeanalyse:

dotnet build /p:RunSqlCodeAnalysis=False

Um mit bestimmten Regel-Einstellungen für die SQL-Codeanalyse zu bauen:

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