小编Nic*_*ley的帖子

将列 NVARCHAR(4000) 快速更改为 NVARCHAR(260)

我有一个性能问题,非常大的内存授予处理这个包含几NVARCHAR(4000)列的表。事情是这些列永远不会大于NVARCHAR(260).

使用

ALTER TABLE [table] ALTER COLUMN [col] NVARCHAR(260) NULL
Run Code Online (Sandbox Code Playgroud)

导致 SQL Server 重写整个表(并在日志空间中使用 2 倍的表大小),这是数十亿行,只是什么都不改变,不是一个选项。增加列宽没有这个问题,但减少它。

我曾尝试创建约束CHECK (DATALENGTH([col]) <= 520)CHECK (LEN([col]) <= 260)SQL Server 仍然决定重写整个表。

有没有办法将列数据类型更改为仅限元数据的操作?无需重写整个表?我使用的是 SQL Server 2017(14.0.2027.2 和 14.0.3192.2)。

这是用于重现的示例 DDL 表:

CREATE TABLE [table](
    id INT IDENTITY(1,1) NOT NULL,
    [col] NVARCHAR(4000) NULL,
    CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED (id ASC)
);
Run Code Online (Sandbox Code Playgroud)

然后运行ALTER.

sql-server alter-table sql-server-2017

13
推荐指数
2
解决办法
740
查看次数

标签 统计

alter-table ×1

sql-server ×1

sql-server-2017 ×1