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