当复制 varbinary(max) 字段时,最大行大小超过限制。

3
我需要将一个表中的数据(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,但未发现错误。
有什么线索可以说明问题出在哪里吗?
2个回答

4

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

2
为了让您不必去查找,以下是相关信息...
ALTER TABLE [docver] REBUILD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接