当我将表alter string从nvarchar(4000)更改为nvarchar(max)时,我收到此错误:
无法创建大小为8064的行,其大于允许的最大值8060
我查看了类似的问题,但仍然无法解释为什么这不起作用
Converting nvarchar(4000) to nvarchar(max)
Cannot create a row of size 8064 which is greater than the allowable row size of 8060
我也尝试将alter语句替换为add列并更新:
在:
alter table myTable alter column myColumn nvarchar(max)
在:
exec sp_rename 'dbo.myTable.myColumn', 'myColumn_old', 'COLUMN'
GO
alter table myTable add myColumn nvarchar(max)
GO
update myTable set myColumn = myColumn_old
但我仍然得到同样的错误。
如何更新此专栏以及此处发生了什么?
答案 0 :(得分:1)
新列的添加可能需要4个字节。它是nvarchar(max)
,因此其大部分数据将存储在行外,但仍需要4个字节来声明其存在。
您可以查看最大的行:
select top 10 * from myTable order by len(myColumn_old) desc
并查看是否可以关闭几个字节。另一种选择是完全创建一个只包含nvarchar(max)
列的新表,然后复制数据:
insert into NewTable (col1, col2, ...) select col1, col2, ... from OldTable