sql 2005 - nvarchar(max) - 无法创建大小为8064的行,该行大于允许的最大值8060

时间:2010-11-15 21:48:44

标签: sql-server sql-server-2005

当我将表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

但我仍然得到同样的错误。

如何更新此专栏以及此处发生了什么?

1 个答案:

答案 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