Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql 2005-nvarchar(最大)-无法创建大于允许的最大值8060的大小为8064的行_Sql Server_Sql Server 2005 - Fatal编程技术网

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

Sql server sql 2005-nvarchar(最大)-无法创建大于允许的最大值8060的大小为8064的行,sql-server,sql-server-2005,Sql Server,Sql Server 2005,当我将table alter column从nvarchar(4000)更改为nvarchar(max)时,出现此错误: 无法创建大于允许的最大值8060的大小为8064的行 我已经看过了类似的问题,但我仍然无法解释为什么这不起作用 我还尝试将alter语句替换为add列并更新: 之前: alter table myTable alter column myColumn nvarchar(max) 之后: exec sp_rename 'dbo.myTable.myColumn', 'my

当我将table alter column从nvarchar(4000)更改为nvarchar(max)时,出现此错误:

无法创建大于允许的最大值8060的大小为8064的行

我已经看过了类似的问题,但我仍然无法解释为什么这不起作用

我还尝试将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
但我还是犯了同样的错误


如何更新此列以及此处发生的情况?

添加新列可能需要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

表中其他列的整体是什么?@Mitchel-int(4)、char(1)、varchar(92)、char(36)、datetime(8)、int(4)、nvarchar(-1)、int(4)、nvarchar(4000)。最后一个是不会转换的。奇怪的是,你会注意到另一个nvarchar(-1)将okJust转换为test,你能将nvarchar转换为ntext吗?@stealthyninja-谢谢你的输入,但这是一个相当大的表,一旦我完成了更新,我就必须恢复才能返回。如果你能告诉我这会有什么帮助或者它会证明什么,我肯定会测试这个。这对于更新来说是有意义的,但是对于alter来说,你是说sql server通过类似的添加和删除过程来执行alter列吗?@Chris Simpson:所有行都包含空位图。因此,添加一个
null
列不会占用任何空间,但是将该列更新为包含行外数据的字符串可能需要额外的字节。对不起,我当时可能不清楚。如果我有一个nvarchar(4000)并将其更改为nvarchar(max),sql会创建一个新列吗?@Chris Simpson:看起来更改一个列是通过添加一个列,将旧列转换为新列,然后删除旧列来实现的