SR0009:请避免使用可变长度大小为 1 或 2 的类型

规则 ID

SR0009

类别

Microsoft.Design

是否重大更改

原因

一种或多种数据类型的变量长度的长度为 1 或 2。

规则说明

当使用长度可变的数据类型,例如 VARCHAR、NVARCHAR 和 VARBINARY 时,您会占用额外的存储空间来跟踪存储在该数据类型中值的长度。 此外,在存储可能会影响性能的固定长度的所有列之后存储了可变长度列。

提示

如果声明一个变量长度类型,例如 VARCHAR,但未指定长度,也将收到警告。 会由于默认长度为 1(如果未指定)而出现此警告。

如何解决冲突

如果类型的长度将会非常小(1 或 2 的大小)并且一致,则将它们声明为固定长度的类型,如 CHAR、 NCHAR 和 BINARY。

何时禁止显示警告

不应禁止显示此警告。

示例

此示例显示了两个表的定义。 第一个表声明具有长度 2 的长度可变的字符串。 第二个表声明固定长度的字符串,这样可以避免该警告。

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]

固定长度数据类型后物理存储可变长度数据类型。 因此,如果在非空的表中将一个列从变量改为固定长度,则将导致数据移动。

请参见

概念

分析数据库代码以提高代码质量