【发布时间】:2021-06-26 13:35:10
【问题描述】:
我正在将列从 NVARCHAR(MAX) 更改为 NVARCHAR(4000),该列不需要是 MAX,并且 4000 个字符应该足以容纳该列,因此为了提高性能,我将列变小。
我认为这很容易:
alter table [MyTable]
alter column [Description] nvarchar(4000) NULL
但是这给了我错误:
赋予参数“描述”的大小 (8000) 超过 允许的最大值 (4000)。
我不明白这个错误消息.. 我没有指定8000,我什至没有超过4000 允许的最大值
那么这里发生了什么?
编辑
表/列上的某些列可以使用NVARCHAR(4000),而其他.. 则不行,使用数字 4000,错误似乎表明我可以在特定列上指定的最大值是 NVARCHAR(2000)
【问题讨论】:
-
如果你有任何数据,你在描述栏中的字符的最大长度是多少
-
您确定这实际上是您正在运行的代码吗?你有任何 DDL 触发器吗?
-
该列中数据的最大长度为
305.. 可能存在 DDL 触发器.. 让我检查一下 -
我不认为将声明的长度从
max缩短到4000有任何性能改进。 -
@user1 。 . .我很确定适合数据页的字符串存储在数据页上,其他页面仅在必要时使用(这里是一些时序sqlshack.com/…)。无论如何,这似乎是一种微优化,即使它确实对桌子产生了影响。
标签: sql sql-server alter-table nvarchar