Freigeben über


T-SQL-Benennungsprobleme

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance SQL-Datenbank in Microsoft Fabric

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 von Ihnen 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 Benennungsprobleme:

SR0011: Vermeiden der Verwendung von Sonderzeichen in Objektnamen

Wenn Sie ein Datenbankobjekt mithilfe eines beliebigen Zeichens in der folgenden Tabelle benennen, ist es nicht nur schwieriger auf dieses Objekt zu verweisen, sondern auch Code zu lesen, der den Namen dieses Objekts enthält:

Zeichen Beschreibung
Leerraumzeichen
[ Eckige Klammer links
] Eckige Klammer rechts
' Einfaches Anführungszeichen
" Doppeltes Anführungszeichen

Behandeln von Verstößen

Um dieses Problem zu beheben, müssen Sie alle Sonderzeichen aus dem Objektnamen entfernen. Wenn auf das Objekt an anderen Speicherorten in Ihrem Datenbankprojekt verwiesen wird (z. B. in Datenbankeinheitstests), sollten Sie die Datenbankrefactoring verwenden, um die Verweise zu aktualisieren. Weitere Informationen finden Sie unter Umbenennen aller Verweise auf ein Datenbankobjekt.

Beispiel

Im ersten Beispiel enthält eine Tabelle eine Spalte mit einem Sonderzeichen im Namen. Im zweiten Beispiel enthält der Name kein Sonderzeichen.

CREATE TABLE [dbo].[TableWithProblemColumn]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[Small'String] VARCHAR(10)
)
ON [PRIMARY]

CREATE TABLE [dbo].[FixedTable]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[SmallString] VARCHAR(10)
)
ON [PRIMARY]

SR0012: Vermeiden der Verwendung reservierter Wörter für Typnamen

Sie sollten vermeiden, ein reserviertes Wort als Namen eines benutzerdefinierten Typs zu verwenden, da es für Leser schwieriger ist, Ihren Datenbankcode zu verstehen. Reservierte Wörter können in SQL Server nur dann als Bezeichner und Objektnamen verwendet werden, wenn Sie getrennte Bezeichner verwenden. Weitere Informationen finden Sie in der Liste aller reservierten Schlüsselwörter.

Behandeln von Verstößen

Sie müssen den benutzerdefinierten Typ oder den Objektnamen umbenennen.

Beispiel

Das erste Beispiel zeigt die Definition für einen benutzerdefinierten Typ, der diese Warnung auslöst. Das zweite Beispiel zeigt eine Möglichkeit, den benutzerdefinierten Typ und das Problem zu beheben.

-- Potential misuse of a keyword as a type name
CREATE TYPE Alter
FROM nvarchar(11) NOT NULL;

-- Corrected type name
CREATE TYPE AlterType
FROM nvarchar(11) NOT NULL;

SR0016: Vermeiden Sie die Verwendung von sp_ als Präfix für gespeicherte Prozeduren

In SQL Server bezeichnet das sp_-Präfix gespeicherte Systemprozeduren. Wenn Sie dieses Präfix für Ihre gespeicherten Prozeduren verwenden, kann der Name Ihrer Prozedur mit dem Namen einer gespeicherten Systemprozedur in Konflikt stehen, die in der Zukunft erstellt wird. Wenn ein solcher Konflikt auftritt, kann Ihre Anwendung zusammenbrechen, wenn Ihre Anwendung auf die Prozedur verweist, ohne den Verweis durch das Schema zu qualifizieren. In diesem Fall bindet der Name anstelle Ihrer Prozedur an die Systemprozedur.

Behandeln von Verstößen

Um dieses Problem zu beheben, müssen Sie sp_ durch ein anderes Präfix ersetzen, um gespeicherte Benutzerprozeduren festzulegen, oder Sie dürfen überhaupt kein Präfix verwenden.

Beispiel

Im ersten Beispiel bewirkt der Prozedurname, dass diese Warnung ausgegeben wird. Im zweiten Beispiel verwendet die Prozedur ein usp_-Präfix anstelle von sp_ und vermeidet die Warnung.

CREATE PROCEDURE [dbo].[sp_procWithWarning]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END

CREATE PROCEDURE [dbo].[usp_procFixed]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END