Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
SQL-Datenbank in Microsoft Fabric
Sie können potenzielle Entwurfs- und Benennungsprobleme beseitigen und Leistungseinbußen vermeiden, indem Sie Ihren Datenbankcode analysieren. Die Konzepte sind mit der Durchführung statischer Analysen vergleichbar, um Fehler in verwaltetem Code zu erkennen und zu korrigieren. 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.
Indem Sie statische Analysen mit den bereitgestellten Regeln durchführen, können Sie Probleme identifizieren, die in die folgenden Kategorien fallen:
T-SQL-Entwurfsprobleme umfassen Code, der sich möglicherweise nicht wie erwartet verhält, veraltete Syntax und Probleme, die beim Entwurf der Datenbank zu Problemen führen können.
Benennungsprobleme bei T-SQL-Benennungsproblemen treten auf, wenn der Name eines Datenbankobjekts zu unerwarteten Problemen führen kann oder allgemein akzeptierte Konventionen verletzen kann.
Leistungsprobleme bei T-SQL Leistungsprobleme umfassen Code, der die Geschwindigkeit, mit der Datenbankvorgänge abgeschlossen werden, erheblich verringern kann. Viele dieser Probleme identifizieren Code, der beim Ausführen des Codes zu einem Tabellenscan führt.
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 die Codeanalyse ausgeführt wird, wenn das Projekt erstellt wird. Standardmäßig werden alle enthaltenen Regeln ausgeführt, und die Regelmustererkennung führt zu einer Build-Warnung.
<?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-/Warnungsverhalten an. Im folgenden Beispiel werden 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>
...
Dem Projekt kann eine StaticCodeAnalysis.SuppressMessages.xml
-Datei hinzugefügt werden, 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, wird möglicherweise mindestens eine Warnung als Entwurfsprobleme kategorisiert. Sie sollten Designprobleme beheben, 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 könnte fehlschlagen, wenn Sie ihn mit zukünftigen Versionen von SQL Server ausführen.
Im Allgemeinen sollten Sie ein Entwurfsproblem nicht unterdrücken, da es Ihre Anwendung entweder jetzt oder in Zukunft unterbrechen könnte.
Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:
- SR0001: Vermeiden Sie AUSWÄHLEN * in gespeicherten Prozeduren, Ansichten und Tabellenwertfunktionen
- SR0008: Erwägen Sie die Verwendung von SCOPE_IDENTITY anstelle von @@IDENTITY
- SR0009: Vermeiden Sie die Verwendung von Typen variabler Länge mit der Größe 1 oder 2
- SR0010: Vermeiden Sie die Verwendung veralteter Syntax, wenn Sie Tabellen oder Ansichten verknüpfen
- SR0013: Ausgabeparameter (Parameter) ist nicht in allen Codepfaden aufgefüllt
- SR0014: Datenverlust kann beim Übertragen von {Type1} in {Type2} auftreten
T-SQL-Benennungsprobleme
Wenn Sie den T-SQL-Code in Ihrem Datenbankprojekt analysieren, wird möglicherweise mindestens eine Warnung als Benennungsprobleme kategorisiert. Sie sollten Benennungsprobleme beheben, um die folgenden Situationen zu vermeiden:
- Der Name, den Sie für ein Objekt angegeben haben, kann mit dem Namen eines Systemobjekts in Konflikt geraten.
- Der angegebene Name muss immer in Escapezeichen eingeschlossen werden (in SQL Server, „[„ und „]“).
- Der von Ihnen angegebene Name verwirren möglicherweise andere, die versuchen, Ihren Code zu lesen und zu verstehen.
- Der Code kann nicht ausgeführt werden, wenn Sie ihn mit zukünftigen Versionen von SQL Server ausführen.
Im Allgemeinen unterdrücken Sie möglicherweise ein Benennungsproblem, wenn andere Anwendungen, die Sie nicht ändern können, vom aktuellen Namen abhängen.
Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:
- SR0011: Vermeiden der Verwendung von Sonderzeichen in Objektnamen
- SR0012: Vermeiden der Verwendung reservierter Wörter für Typnamen
- SR0016: Vermeiden Sie die Verwendung von sp_ als Präfix für gespeicherte Prozeduren
T-SQL-Leistungsprobleme
Wenn Sie den T-SQL-Code in Ihrem Datenbankprojekt analysieren, wird möglicherweise mindestens eine Warnung als Leistungsprobleme kategorisiert. Sie sollten Leistungsprobleme beheben, um die folgende Situation zu vermeiden:
- Wenn der Code ausgeführt wird, erfolgt ein Tabellenscan.
Im Allgemeinen können Sie ein Leistungsproblem unterdrücken, wenn die Tabelle so wenig Daten enthält, dass ein Scan die Leistung nicht erheblich abnimmt.
Die bereitgestellten Regeln identifizieren die folgenden Entwurfsprobleme:
- SR0004: Vermeiden Sie die Verwendung von Spalten, die keine Indizes als Testausdrücke in IN-Prädikaten aufweisen
- SR0005: Vermeiden Sie die Verwendung von Mustern, die mit „%“ in LIKE-Prädikaten beginnen
- SR0006: Verschieben eines Spaltenverweises auf eine Seite eines Vergleichsoperators zur Verwendung eines Spaltenindex
- SR0007: Verwenden Sie ISNULL (Spalte, Standardwert) bei nullfähigen Spalten in Ausdrücken
- SR0015: Extrahieren deterministischer Funktionsaufrufe aus WHERE-Prädikaten
Aktivieren und Deaktivieren der Codeanalyse
Um die SQL-Codeanalyse in Visual Studio zu aktivieren oder zu deaktivieren, klicken Sie mit der rechten Maustaste auf das Projekt in Projektmappen-Explorer, und wählen Sie Eigenschaften aus. Wählen Sie auf der Registerkarte Code Analysis des Eigenschaftenfensters die gewünschten Codeanalyseeinstellungen aus.
Um eine bestimmte Regel zu deaktivieren oder zu aktivieren, wählen Sie die Regel aus der Tabelle aus. Um den Schweregrad einer Regel zu ändern, wählen Sie das Kontrollkästchen Warnung als Fehler behandeln für diese Regel aus der Liste aus.
Um die SQL-Codeanalyse in den SDK-ähnlichen SQL-Projekten (Vorschau) zu aktivieren oder zu deaktivieren, bearbeiten Sie die .sqlproj
-Datei direkt. Öffnen Sie die .sqlproj
-Datei aus der Ansicht Projektmappen-Explorer, indem Sie auf das Projekt doppelklicken.
Fügen Sie im Text-Editor ein Element <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
zum ersten <PropertyGroup>
-Block hinzu, um die Codeanalyse zu aktivieren. Wenn Sie die Codeanalyse deaktivieren möchten, ändern Sie den Wert des RunSqlCodeAnalysis
-Elements in True
oder False
oder entfernen Sie das Element vollständig.
Um die SQL-Codeanalyse in der Erweiterung SQL Database Projects zu aktivieren oder zu deaktivieren, bearbeiten Sie die .sqlproj
-Datei direkt. Öffnen Sie die .sqlproj
-Datei aus der Explorer-Ansicht oder klicken Sie mit der rechten Maustaste auf das Projekt in der Ansicht Datenbankprojekte und wählen Sie SQLPROJ-Datei bearbeiten aus.
Fügen Sie im Text-Editor ein Element <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
zum ersten <PropertyGroup>
-Block hinzu, um die Codeanalyse zu aktivieren. Wenn Sie die Codeanalyse deaktivieren möchten, ändern Sie den Wert des RunSqlCodeAnalysis
-Elements in True
oder False
oder entfernen Sie das Element vollständig.
Um die Codeanalyseeinstellungen in der Projektdatei außer Kraft zu setzen, können Sie die /p:RunSqlCodeAnalysis
- und /p:SqlCodeAnalysisRules
-Eigenschaften mit dem dotnet build
-Befehl verwenden. 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"