小编典典

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

sql

我需要将数据(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,但未发现错误。

关于这里可能出什么问题的任何线索吗?


阅读 262

收藏
2021-04-28

共1个答案

小编典典

您的docver表可能具有删除或更改的列,但仍在占用空间。

请参阅为什么在删除或添加列后重新构建表?

2021-04-28