Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 复制varbinary(max)字段时超出了最大行大小_Sql_Sql Server 2008_Sql Update - Fatal编程技术网

Sql 复制varbinary(max)字段时超出了最大行大小

Sql 复制varbinary(max)字段时超出了最大行大小,sql,sql-server-2008,sql-update,Sql,Sql Server 2008,Sql Update,我需要将数据(varbinary(max))从一个表迁移到另一个表。当执行更新以执行此操作时,我得到以下错误 Msg 511, Level 16, State 1, Line 18 Cannot create a row of size 8078 which is greater than the allowable maximum row size of 8060. 这是我用来从表DocumentPublication复制到DocumentVersion的更新 UPDATE docver

我需要将数据(varbinary(max))从一个表迁移到另一个表。当执行更新以执行此操作时,我得到以下错误

Msg 511, Level 16, State 1, Line 18
Cannot create a row of size 8078 which is greater than the allowable
 maximum row size of 8060.
这是我用来从表DocumentPublication复制到DocumentVersion的更新

UPDATE docver SET RecapRTF = CAST(RTFPublication as VARBINARY(MAX)) FROM
DocumentVersion docver INNER JOIN DocumentPublication docpub 
ON docpub.IdDocumentVersion = DOCVER.id
还是不投

UPDATE docver SET RecapRTF = RTFPublication FROM
DocumentVersion docver INNER JOIN DocumentPublication docpub  
ON docpub.IdDocumentVersion = DOCVER.id
通过逐行执行更新,我已经隔离了产生错误的行。奇怪的是,该字段中的数据只有3950字节,而其他行的大小(如2000字节或20MB)可以正常工作

然后,我用另一个名称重新创建了目标表,现在它可以复制varbinary字段了

SQL Server版本为2008 R2,具有最新更新,数据库兼容性为100(SQL Server 2008)。我已经运行了DBCC CHECKDB和DBCC CHECKALLOC,但没有发现错误


这里有什么错误的线索吗?

您的
docver
表中可能有一个删除或更改的列仍在占用空间


查看这样你就不必去查了

ALTER TABLE [docver] REBUILD

非常感谢你指出这一点!这真让我头疼。现在我也明白了为什么SMSS中的设计器在只对表进行一些“微小”更改时会生成一个新表。