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

时间:2012-03-14 11:43:35

标签: 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 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 个答案:

答案 0 :(得分:4)

您的docver表可能有一个丢弃或更改的列仍占用空间。

请参阅Why should I rebuild a table after dropping or adding a column?

答案 1 :(得分:2)

这样你就不用去查找......

ALTER TABLE [docver] REBUILD