SR0009 : Évitez d'utiliser des types de longueur de variable dont la taille est 1 ou 2

Id de la règle

SR0009

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un ou plusieurs types de données de longueur variable ont une longueur de 1 ou 2.

Description de la règle

Lorsque vous utilisez des types de données de longueur variable comme VARCHAR, NVARCHAR et VARBINARY, vous encourez des coûts de stockage supplémentaires pour suivre la longueur de la valeur stockée dans le type de données. De plus, les colonnes de longueur variable sont stockées après toutes les colonnes de longueur fixe, qui peut avoir des conséquences de performance.

Notes

Vous recevrez également un avertissement si vous déclarez un type de longueur variable, tel que VARCHAR, mais que vous ne spécifiez pas de longueur. Cet avertissement se produit parce que, si elle n'est pas spécifiée, la longueur par défaut est 1.

Comment corriger les violations

Si la longueur du type sera très petite (de taille 1 ou 2) et cohérente, déclarez-les comme un type de longueur fixe, tel que CHAR, NCHAR et BINARY.

Quand supprimer les avertissements

Vous ne devez pas supprimer cet avertissement.

Exemple

Cet exemple montre des définitions pour deux tables. La première table déclare une longueur de 2 pour une chaîne de longueur variable. La deuxième table déclare une chaîne de longueur fixe à la place, ce qui évite l'avertissement.

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]

Les données pour les types de longueur variable sont stockées physiquement après les données pour les types de longueur fixe. Par conséquent, vous provoquez un mouvement des données si vous modifiez une colonne de longueur variable en colonne de longueur fixe dans une table qui n'est pas vide.

Voir aussi

Concepts

Analyse du code de base de données pour en améliorer la qualité