SR0009: Vermeiden Sie die Verwendung von Typen mit variabler Länge mit Größe 1 oder 2
Regel-ID |
SR0009 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Mindestens ein Datentyp mit variabler Länge besitzt die Länge 1 oder 2.
Regelbeschreibung
Wenn Sie Datentypen variabler Länge, z. B. VARCHAR, NVARCHAR und VARBINARY, verwenden, benötigen Sie zusätzliche Speicherkapazität, um die Länge des im Datentyp gespeicherten Werts zu verfolgen. Außerdem werden Spalten mit variabler Länge nach allen Spalten mit fester Länge gespeichert, was Auswirkungen auf die Leistung haben kann.
Tipp
Sie empfangen auch eine Warnung, wenn Sie einen Typ mit variabler Länge deklarieren (z. B. VARCHAR), aber keine Länge angeben. Diese Warnung wird angezeigt, da die Standardlänge ohne entsprechende Angabe 1 ist.
Behandeln von Verstößen
Wenn die Länge des Typs sehr klein (Größe 1 oder 2) und konsistent ist, deklarieren Sie sie als einen Typ fester Länge, z. B. CHAR, NCHAR und BINARY.
Wann sollten Warnungen unterdrückt werden?
Diese Warnung sollte nicht unterdrückt werden.
Beispiel
In diesem Beispiel werden Definitionen für zwei Tabellen gezeigt. In der ersten Tabelle wird für eine Zeichenfolge mit variabler Länge deklariert, dass die Länge 2 betragen soll. In der zweiten Tabelle wird stattdessen eine Zeichenfolge mit fester Länge deklariert, wodurch die Warnung vermieden wird.
CREATE TABLE [dbo].[TableWithWarning]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[c1] INT NOT NULL PRIMARY KEY,
[c2] INT,
[c3] INT,
[SmallString] VARCHAR(2)
)
ON [PRIMARY]
CREATE TABLE [dbo].[FixedTable]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[c1] INT NOT NULL PRIMARY KEY,
[c2] INT,
[c3] INT,
[SmallString] CHAR(2)
)
ON [PRIMARY]
Daten für Typen variabler Länge werden physisch nach Daten für Typen fester Länge gespeichert. Daher verursachen Sie eine Datenverschiebung, wenn eine Spalte von einer variablen in eine feste Länge in einer Tabelle geändert wird, die nicht leer ist.
Siehe auch
Konzepte
Analysieren von Datenbankcode zum Verbessern der Codequalität